[過去ログ] Regular Expression(正規表現) Part16 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
39: 2021/11/17(水)11:32 ID:6wJ0temu(3/3) AAS
>>37
エディタ上でははっきりと区別がつくけど
こんな所へ貼る場合は確かに分かり難いね
まあこの場合は目的が分かってるので分かりやすいとも言えるけど
40: 2021/11/17(水)20:33 ID:vtK5EVRE(3/3) AAS
Jane用の正規表現を掲示板に貼るときにはタブ文字のところを 【tab】 って
書き換えて貼ってたなぁ、しかしJane自体が廃れて使うことが無くなった
41(1): 27 2021/11/17(水)23:51 ID:pGjzwEdG(3/3) AAS
27です
こんなにも早く教えてくださってとても助かりました!
()が要らなかったんですね。勉強になります!
ありがとうございました!
42(2): 29 2021/11/19(金)20:58 ID:rZqXBgxj(1/2) AAS
これの検証してみた
Absence operator is broken #150
外部リンク:github.com
・検証コード (ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x64-mingw32])
p /(?~a.*[bv].*c)/.match("000a111v222c333b444c555")
・結果
#<MatchData "000a111v222c333b444">
a〜v〜c を含んでしまってるのでバグで確定
原因は最初にマッチした段階で検索を打ち切ってしまっていて
別のパターンを見逃している
省6
43: 29 2021/11/19(金)23:35 ID:rZqXBgxj(2/2) AAS
ついでにもう1つだけ
Use of \K when the string to match after \K can be empty #152
外部リンク:github.com
これは \K を使ってゼロ幅マッチになった場合に次の検索開始位置が
予期せず1つ進んでしまう問題のようだ
gsubの仕様かなと思ったけど (?<=\w) と \w\K の2つが違う結果になるのは
違和感ある、\K での ゼロ幅マッチ後の pos を進まないようにすれば直りそう
takata先生の代わりにちゃちゃっと始末してくれるスーパーハカーさん募集
44: 29 2021/11/20(土)00:06 ID:dCkHZW0G(1/2) AAS
\K より前で文字を消費していない場合は pos は進まないようだ
/\K/ → pos進まず
/.\K/ → 予期せずpos進んでしまう
45(1): 2021/11/20(土)13:49 ID:S4adbGs3(1) AAS
>>42
イシュー150の起票者がオリジナルの鬼車作者さんやんけw
46: 29 2021/11/20(土)14:09 ID:dCkHZW0G(2/2) AAS
>>45 そうなんだよね、だから気になってた
-------------------------------------------------
>>42 とは別の検証をしてみた
p /(?~a.*b.*c|222)/.match("000a111b222c333")
#<MatchData "000a111b22">
これは期待通りにマッチした、これが正しく動くということは
論文の読み落としではないね、失礼しました
問題は同一posでマッチ文字数が最短になるマッチを見つけなければいけないが
それをしていないことみたいだ
この処理って結構な処理量になりそうだけど大丈夫なのかな?
省5
47(1): 29 2021/11/25(木)18:40 ID:QsU6pq8j(1/2) AAS
Onigmo のバグの原因となった個所が判明したので書いておこう
正規表現における非包含オペレータの提案
外部リンク[pdf]:staff.aist.go.jp
この論文のサンプルコードに下記のメソッドがある
def try_alt(r1, r2, str, pos, &block)
try(r1, str, pos, &block)
try(r2, str, pos, &block)
end
これは正規表現で言うと r1|r2 の "|" にあたる動作をする部分のメソッドだが
このサンプルコードでは r1 のマッチが成功した後でも必ず r2 を試す仕様になっている
省7
48: 29 2021/11/25(木)19:06 ID:QsU6pq8j(2/2) AAS
論文3ページ目の右半分に 表3 がある
r1r2 | [:seq, r1, r2]
ここの :seq は r1 と r2 を連接するという意味で使われているが
サンプルコードでは :seq を使わず :cat になっている
ここで疑問なのが何故違う名前を使うことになったのか? である
(仮説1) 非包含オペレータ提案者さんは猫が好き
ごろにゃんしながらバックトラックにゃん である
省2
49(1): 2021/11/29(月)20:58 ID:ZJywLyaD(1/3) AAS
ある短い英単語が文章に含まれているかどうかを判定したいのですが、
他の英単語の一部に含まれているようなときは除外したいです。
例:検索単語:ap、
○:ap is short of...
○:これはapです
NG:pen pineapple apple pen
つまり、『単語の前後に文字がある場合は、それらがアルファベットでない』という条件を加えたいのですが、
これの実現方法に詰まっています。
[^a-zA-Z]ap[^a-zA-Z]
の至るところに、.*や*や+を様々なパターン試したのですがうまく行かず。。。
省2
50: 2021/11/29(月)21:09 ID:be+dUloq(1/2) AAS
>>49
(?<![a-zA-Z])ap(?![a-zA-Z])
もし英文のみなら
\bap\b
でも可
51: 2021/11/29(月)21:22 ID:ZJywLyaD(2/3) AAS
こんなに早く教えていただいてありがとうございます。
試してみたのですが、うまく行きませんでした。検証方法間違ってますでしょうか?
----------------
value="abc ap abc"
pattern = "(?<![a-zA-Z])ap(?![a-zA-Z])"
re.match(pattern, value)
※何も取得できず
----------------
52(1): 2021/11/29(月)21:35 ID:7mT4ej7+(1) AAS
re.matchじゃなくてre.search
matchは先頭位置からしかマッチするか調べない
53(1): 2021/11/29(月)21:41 ID:be+dUloq(2/2) AAS
ところで
ap'sとかap-dataとかもろもろの扱いはいいのか?
54: 2021/11/29(月)22:02 ID:ZJywLyaD(3/3) AAS
>>52
ありがとうございます!うまく行きました!
大変初歩的な間違い、失礼いたしました。。。ご助言ありがとうございます
>>53
ご指摘ありがとうございます。そこの考慮をしていませんでした。
今回はたまたま問題ありませんでしたが、これからは考えます。
ありがとうございました。
55: 29 2021/12/06(月)21:53 ID:S5ugmQVz(1) AAS
rubyのコードが読めたから調子に乗って鬼車のソースからのインストールと
simple.c の実行に挑戦してみたら成功するまで10日くらいかかった
win10 パソコンで VMware を動かして中に ubuntu 20.04 を入れて
oniguruma 6.9.7 をインストした
あとは C言語で書かれたサンプルコードを解析すれば oniguruma の
色々なオプションを試せるようになる..
Unix も C言語 も知らないしプログラマでもないミジンコだけどググりまくれば
意外と何とかなりそうだ、次は Onigmo を入れよう..
56(1): 29 2021/12/07(火)02:27 ID:gbEOg3vj(1/3) AAS
Onigmo もインスト出来たけど simple.c の実行結果がおかしい
// oniguruma の場合
match at 4
0: (4-14)
1: (5-13)
// Onigmo の場合
match at 4
0: (21474836484-55834574862)
1: (0-0)
インスト失敗か?
省3
57: 29 2021/12/07(火)04:28 ID:gbEOg3vj(2/3) AAS
↑の構成確認の件はOnigmo の README.ja の 111 〜 114 行目 が
oniguruma の説明のままなだけだった、takata先生更新を..
.ja が付いてない英語版も同様です
github の Onigmo のトップページでは正しく
"onigmo-config --cflags" と書いてありました
58: 29 2021/12/07(火)15:13 ID:gbEOg3vj(3/3) AAS
↑ の件ですが README.ja の 61 行目の
> 以下、鬼車の README.ja:
を見落としておりました、鬼車の説明書きのコピペだったのね..orz
>>56 の Onigmo の結果がおかしかったのも↓で正常動作しました
間違い: cc sample.c -L/usr/local/lib -lonig
正しい: cc sample.c -L/usr/local/lib -lonigmo
省1
59: 29 2021/12/14(火)23:52 ID:hRBVXs3o(1) AAS
perl5と鬼車、鬼雲の動作を比べて遊んでたらperl5の変な挙動を発見
\d{1} の {1} を付けるか消すかで結果が変わる
---------------------------
my $str = '12';
$str =~ s/(?<name>\d{1}){0}(?&name)/<match=$&>/;
print "$str\r\n";
---------------------------
↓{0} での定義を (?(DEFINE) ... ) に変えると正常動作する
---------------------------
my $str = '12';
省4
60: 29 2021/12/15(水)05:01 ID:+lf8SrwJ(1) AAS
・ {0} での定義ではマッチせず
---------------------------
my $str = '123';
$str =~ s/(?<name>123){0}(?&name)/<match=$&>/;
print "$str\r\n";
・DEFINEを使うと正常動作する
---------------------------
my $str = '123';
$str =~ s/(?(DEFINE)(?<name>123))(?&name)/<match=$&>/;
print "$str\r\n";
省2
61(1): 29 2021/12/16(木)22:14 ID:0VSoy2O4(1) AAS
onigurumaの非包含オペレータの動作が論文と違う
正規表現 ^(?~abc) をテキスト 0123abcd に対して検索して比較すると..
論文の動作 : 0123ab がマッチする
onigurumaの動作 : 0123 がマッチする
逆に Onigmo は分岐が含まれない正規表現なら論文通りに動作するので
この場合は論文と同じ動作をする
動作的には ((?!abc).)* と同じなので論文で指摘されているように
形式言語理論から逸脱しているし、後ろに続く正規表現によっては
マッチ出来ずに検索が終わってしまうケースが発生する 例、 ^(?~abc)c
非包含オペレータは提案から14年経ってもなお未完のままということに..
62(1): 2021/12/17(金)13:32 ID:N/8v4GiQ(1) AAS
>>61
^(?~(?<=ab)c)
63(1): 2021/12/17(金)15:12 ID:wvP9ttxM(1) AAS
記号が同じなだけで名称も説明上の動作も違うからそもそも似て非なる別物
ではなくて?
64: 29 2021/12/17(金)19:59 ID:t+q3CK3B(1) AAS
>>62 それ反則w ちなみにこんなのもある
Perl正規表現雑技 : ある文字列を含まないものにマッチする正規表現
外部リンク[htm]:www.din.or.jp
>>63 その解釈で間違ってないと思う、oniguruma の (?~abc) は仕様が
決まった時点で別物だね、(?:(?!abc).)* の拡張版と言ったほうがしっくりくる
実用上は oniguruma 版のほうが使いやすそうだしあえて変えたんだろうね
65: 2021/12/17(金)20:49 ID:BDVQn7Pa(1) AAS
いやぁ、、ヒネくれちゃっただけでしょ
66: 2021/12/19(日)06:09 ID:X6k+U6Sv(1) AAS
成果だけ横から頂いてこっちで改変流用するわwおまえ除名なwとか言われちゃったらまあ拗ねもするさ
67: 2021/12/19(日)08:57 ID:hMGijQ8S(1) AAS
(?s:^(?=.*(?:トビラ|280|280|[内外]製|純正|公式))(?=.*(?:ガイジ|発狂|長文|必死|キチガイ|キチキチ)))
これが効かないんすけど何か間違えてますか?
2chスレ:android
68: 2021/12/19(日)10:54 ID:mCvaVjB9(1) AAS
少なくともchmateだとマッチしてる
正規表現と文字列の切り替えの設定間違えてるんじゃないの
上下前次1-新書関写板覧索設栞歴
あと 934 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.030s