Regular Expression(正規表現) Part17

346デフォルトの名無しさん
垢版 |
2025/12/14(日) 10:32:54.84ID:4RDsvJB6
本体部分のパターンが [0-9]{5} なんだから、先読み・戻り読みのアサーション条件をクリアする限り、15080にもマッチするのが意味論どおりの動作ではないかということなんだが。
2025/12/14(日) 11:08:03.17ID:Pr7gBHpv
ここでグラフィカルに確認できる
https://www.debuggex.com/
2025/12/14(日) 11:12:12.21ID:C4yAKXLX
先読みは位置を動かさない
つまり、この場合「本体」部分にその文字列が無いのが条件となる
2025/12/14(日) 11:14:59.12ID:Pr7gBHpv
(?!15080)([0-9]{5})
1508015080は50801にマッチ
15079は15079にマッチ

(?<!15080)([0-9]{5})
1508015080は15080にマッチ ←ここ
15079は15079にマッチ
2025/12/14(日) 11:24:53.49ID:C4yAKXLX
よくある使い方
((?!abc).)+
abcでない文字列
2025/12/14(日) 11:28:30.93ID:C4yAKXLX
1文字の場合は [^a]+
これの複数文字パターンってこと
352デフォルトの名無しさん
垢版 |
2025/12/14(日) 11:47:42.73ID:4RDsvJB6
うーん、ちょっとアサーションについて誤解していたところがあったかも。考え直してみますわ。
2025/12/14(日) 12:38:24.68ID:C4yAKXLX
順序を逆にすると本体部分で位置が進むので
([a-z](?!abc))+
abcd → abcd ;先頭はabcだがaの後ろにはabcがないのでaにもマッチする
xabcd → abcd
[a-z]+(?!abc)なら
xabcd → xabcd ; [a-z]+でxabcdがマッチしその後ろにはabcが無いので
[a-z]+(?<!bcd)なら
abcd → abc ; abcdと進んでいくとbcdにマッチするので逆行してabcでストップする
354デフォルトの名無しさん
垢版 |
2025/12/14(日) 20:13:40.52ID:pwvrkpuI
この正規表現で前後の半角空白を除く
descriptionだけを一致させる正規表現を教えて欲しいです
環境はサクラエディタです

/ ?description /
2025/12/14(日) 21:35:52.99ID:IHataGt8
/description(?= )/
356デフォルトの名無しさん
垢版 |
2025/12/14(日) 21:55:21.25ID:pwvrkpuI
>>355
ありがとうございました!
2025/12/14(日) 23:41:29.96ID:IHataGt8
>>346
戻り読み・先読みアサーションにはそれぞれ肯定と否定があります
(?<=肯定戻り読み) (?=肯定先読み)
(?<!否定戻り読み) (?!否定先読み)
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況