[過去ログ] Regular Expression(正規表現) Part16 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
951: 2023/11/05(日)15:52 ID:q8heJbgz(3/3) AAS
2がエラーになるのは誤りだ、異論ある?
いつもの超優秀な人(AI?)の意見を聞かせて欲しい
952: 2023/11/06(月)06:59 ID:j6L5l5bH(1/2) AAS
異論はないってことで良いかな、おそらく既知の問題(仕様)だと思われる
この問題に長年気付かないとは考えられないから
本来動くべきサンプルを貼って>>949の件は終了とする
x2("(?:\\k<n>b|(?<n>a))+", "aab", 0, 3); // ERROR: undefined name <n> reference
x2("(?:(?<n>a)|\\k<n>b)+", "aab", 0, 2); // OK
x2("(?:\\1b|(a))+", "aab", 0, 3); // OK
x2("(?:(a)|\\1b)+", "aab", 0, 2); // OK
953: 2023/11/06(月)19:00 ID:j6L5l5bH(2/2) AAS
回避策
x2("(?<n>a){0}(?:\\k<n>b|\\g<n>)+", "aab", 0, 3); // OK
954: 2023/11/15(水)17:50 ID:Karf8A+O(1) AAS
文字列の頭に部分一致するパターンなんですが・・・
「abcdefg」にマッチするパターンですが、
/^a(?:b(?:c(?:d(?:e(?:f(?:g)?)?)?)?)?)?/
と書くしかないですか?
文字列が長大な場合、ちょっと無理なんですが・・・
(文字はアルファベットとは限らず)
WindowsのJScriptですが。
955: 2023/11/15(水)18:12 ID:ctqB5947(1) AAS
/^abcdefg/
956: 2023/11/15(水)18:41 ID:/mJ+eeiZ(1) AAS
無いんじゃないか?
^(?:abcdefg|abcdef|abcde|abcde|abcd|abc|ab|a)
とどっちがマシかな
957(1): 2023/11/16(木)14:47 ID:7i/8qZTv(1/2) AAS
/^m/ にマッチして map だけマッチして欲しくない
/^m[^a][^p]/ これだと man にマッチしてくれない
どう書けばいいですか
958: 2023/11/16(木)14:53 ID:4tHpE5Jq(1) AAS
>>957
否定先読みが使えるなら^m(?!ap)かな?
959: 2023/11/16(木)15:59 ID:7i/8qZTv(2/2) AAS
ありがとう
960: 2023/11/17(金)04:25 ID:gwXFy+9L(1) AAS
特定の文字列を検出したい場合、\Q~\Eの~に、その特定の文字列を入れておけば、どんな文字が来ても大丈夫でしょうか?
961: 2023/11/17(金)06:13 ID:28WV0iMa(1) AAS
\Eが来ると困る
962: 2023/11/28(火)12:33 ID:vIU65Zk5(1/5) AAS
正規表現スレがいいと聞いてきました
ここがいい正規表現すれですか?
$ perl -e '$a="abc"; $a =~ s/(.*)/[$1]/g; print $a . "\n"'
[abc][]
なんで後ろにカッコが来るん?
.*に全部マッチするんだから
二個目の[]が来るなんてお菓子にゃん?
963(1): 2023/11/28(火)13:42 ID:EkqG9ePT(1) AAS
perlよく知らんがgとったら消える
964(1): 2023/11/28(火)13:54 ID:uy7CvN4q(1/3) AAS
推測だが、
1) .*にabcがマッチする -> [abc]
2) .*は0個でもいいので、末尾位置(NUL)にマッチする -> []
965(1): 2023/11/28(火)14:25 ID:uy7CvN4q(2/3) AAS
2回目は$a=""の場合と同じだと思えばいい
ヌル文字列でも.*だとマッチするでしょ?
966: 2023/11/28(火)16:18 ID:vIU65Zk5(2/5) AAS
>>963
gとったら消える。Rubyも同じらしい。
>>964
[]が出るってことはなにかにマッチしてるってことでしょ?
>>965
それなら最初の.*にもマッチするじゃん?
一回目にマッチしなくて、二回目にマッチする理由がわからんのよ
967: 2023/11/28(火)16:18 ID:JJPCdnVt(1/2) AAS
仮に2回目でマッチする何かがあったとしても
.*はgreedyなんだから1回目で消費してないとお菓子イイ
968(1): 2023/11/28(火)16:20 ID:JJPCdnVt(2/2) AAS
でもなぁ
バグなら今までこんなん気が付かないはずないと思うからどうなんだろ
969: 2023/11/28(火)16:21 ID:vIU65Zk5(3/5) AAS
$ perl -e '$a="abc"; $a =~ s/(.*)$/[$1]/g; print $a . "\n"'
[abc][]
$ perl -e '$a="abc"; $a =~ s/(.*$)/[$1]/g; print $a . "\n"'
[abc][]
後ろに$入れても同じ
行末以降の何にマッチしてんのこれ?
970: 2023/11/28(火)16:22 ID:vIU65Zk5(4/5) AAS
Rubyのコードも持ってきた。持ってきただけだから意味は知らん。
ruby -e 're=/(.*)/; puts %Q(abc).sub(re){ %Q([#$1]) }'
[abc]
ruby -e 're=/(.*)/; puts %Q(abc).gsub(re){ %Q([#$1]) }'
[abc][]
971(1): 2023/11/28(火)16:44 ID:wVUnEJO+(1) AAS
ググってみたがperlのそういう”仕様”として定着してるみたいだな
引っかかったことなかったわ
972(1): 2023/11/28(火)16:47 ID:uy7CvN4q(3/3) AAS
>>968
1回目の.*で文字列全体がマッチ、2回目でNUL文字列にマッチするのは
どの正規表現環境でも同じだと思うよ
973: 2023/11/28(火)16:49 ID:CppHkuHl(1) AAS
0文字と一致させたくなければ.*ではなく.+と書けよ
974: 2023/11/28(火)16:59 ID:fB6/42vV(1/2) AAS
>>972
Perlの文字列はNull Terminatedされてないよ
/gだとマッチできないか再度確かめるからzero-lengthのempty stringにマッチするんだとさ
でも同じ位置でempty stringに2回はマッチしないようなチェックが入ってるからそこで抜けるんだとさ
個人的にはバグだと思うけどPCRE準拠でみんな作ってるから同じ動きをさせたんだろうね
regex101で試すとRustだけが一般に期待する動作をしてる
975: 2023/11/28(火)17:02 ID:fB6/42vV(2/2) AAS
/(.*)$/みたいに末尾のアンカー入れても結果変わらないから余計におかしい
^を入れたら当然防げるけど
976: 2023/11/28(火)17:09 ID:vIU65Zk5(5/5) AAS
>>971
探したけど見つからんかった。
どこにあった? or どうやって探した?
キーワードがわからん
977: 2023/11/28(火)18:08 ID:waKUlTL5(1) AAS
これは長さゼロでマッチした直後に長さゼロにマッチしてposが進まなかったときにマッチを終了するという、頭の悪い正規表現を書くマヌケのために配慮された動作が例外的なんだよ
そのおかげで頭の悪い正規表現を書いても無限ループさせずに済んだことにむしろ感謝するべきだね
978: 2023/11/28(火)18:30 ID:mMoqXMUf(1) AAS
(ハクション!
979: 2023/11/28(火)19:16 ID:6l9rHssS(1) AAS
単に便利だからゼロ幅マッチさせてるん
$str =~ s/()/$1,/g; やってみるといいのん
980(2): 2023/11/29(水)13:08 ID:yvH2v9xT(1/2) AAS
正規表現検索は失敗しないかぎり終わらないって話では
abcに対して(.*)$が検索される→「abc+末尾」がマッチ、この時点での位置はcの後ろのゼロ幅
残りの部分に対して再度(.*)$が検索される→「ゼロ幅+末尾」がマッチ、cの後ろのゼロ幅が消費される
残りの部分に対して再度(.*)$が検索される→対象を消費しきっているので失敗→検索終了
上下前次1-新書関写板覧索設栞歴
あと 22 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.033s