正規表現でちょっと教えて下さい。
「任意の数字以外の4桁の数字」
を表現する方法を教えて下さい。
4桁の数字は、
\d{4}
ですが、その中から例えば1234を除外した表現方法を教えてください。
(1234は「1」「2」「3」「4」ではなく、一千二百三十四です。つまり1万通りから1通りを除外したいと言う意味です)
宜しくお願いします。
[17865] たも (2015/03/18 Wed 19:01)
(@?(?!1234))\d{4}
否定先読みの応用です。
@はダミー文字です。数字の先頭に絶対使わないような文字であればなんでも構いません。
[17866] Subi (2015/03/19 Thu 00:37) web
Subi 様
回答ありがとうございます。
早速試してみました。
理想の結果を返してくれました。
一部を除く記述の考え方など色々応用が利きそうで大変参考になりました。
期待通りの結果を返してくれましたが、原理が今一判りずらかったので後学のため色々テストしてみました。
単に否定後読みのみ「(?!1234)\d{4}」でも同様の結果が出ました(全ての検証はしていませんが)が、ダミー文字の効果はどの様なケースが考えられるのでしょうか。
[17869] たも (2015/03/19 Thu 15:00)
> 単に否定後読みのみ「(?!1234)\d{4}」でも同様の結果が出ました(全ての検証はしていませんが)が、ダミー文字の効果はどの様なケースが考えられるのでしょうか。
後読みと先読み間違えてしまいました。否定先読みでした。
[17870] たも (2015/03/19 Thu 15:01)
すみません、実は私もよく解っていません。
否定先読みなのに前に文字がないのが違和感があるので、習慣的にダミー文字を入れているだけです。
どなたか詳しい方がいたら解説してほしいです。
[17871] Subi (2015/03/19 Thu 17:18) web
正規表現にとって理解の難しい「先読み、後読み」なのに逆に記述した使い方。
余計こんがらがってきます。
俄検証ですが、逆に
\d{4}(?<!1234)
も同じ効果の様相を見せている雰囲気。
正規表現の奥深さが見える気がします。
[17873] たも (2015/03/19 Thu 20:10)