パターン
(?<![指定文字])KEY(?![指定文字])
何ができるか
タイトルのとおり、指定文字を前後に含まないKEYを検索します。
KEYだけヒットします。置換には適さないかもしれません。
サンプル
(?<![\w"'])[\d\.]+(?![\w"'])
前後に[\w"']
がない[\d\.]+
を検索します。1
結果
超テキトーなテストですが上手くいきました。2
経緯
業務でホスト系システムを触っていたのですが、固定長ファイルやCSVの走査をする必要がありました。
文字列数値ではなく、数値項目が欲しかったため作りました。
要は
"123"
ではなく123
が欲しいということ。
もっと簡単なパターンがあると思いますが、これはこれで汎用性が高そうなのでご活用ください。
え?逆パターンが欲しい?
おまかせあれ、否定を肯定に変えるだけで・・・
逆パターン
(?<=[\w"'])[\d\.]+(?=[\w"'])
結果
それもそのはず\w
は文字、数値、アンダースコアのいずれかにヒットするからです。3
正しい逆パターン
(?<=["'])[\d\.]+(?=["'])
結果
これで無事に文字列数値が取得できました。
めでたしめでたし。
最後に
今回しれっと書いていた(?<!pattern)
を始めとした「先読み・後読み」は正規表現を上手く使うためにかな~り重要です。
正直、完全には理解できていないので、自分の知識が固まったら記事にしようと思います。
参考
良い記事を書くためのガイドライン
正規表現メモ
正規表現の先読み・後読みを極める!