どもです。
今回は正規表現の話。
とある画像ファイル名を一括置換するため、正規表現にかけたい。
画像名はこういった法則性になっている。(*は任意の半角アルファベットor数字)
****male_*.png
****female_*.png
このとき、
/^.+male_.+\.png$/
といった正規表現を行ってしまうと、「****male_*.png」「****female_*.png」の両方がマッチしてしまう。
かといって、
/^.+[^fe]male_.+\.png$/
こうしてしまうと、「statemale_1.png」のように、eやfだけで引っかかってしまい、要件を満たさない。
さて、特定位置に登場する複数の文字を否定するには、どうしたら良いのか。
/^.+(?<!fe)male_.+\.png$/
正解は、否定後読みを使用すること。
否定後読みとは、この場合でいう「male」の前が「fe」でないことをマッチする正規表現とのこと。
これを使用すれば、
○ ***emale_1.png
○ ***fmale_1.png
○ ***feemale_1.png
× ***female_1.png
といった感じに、「female」という文字列のみをマッチ失敗にすることができた。
問題解決。
なお、使用したソフトが否定後読みを受理してくれなかったもので、手動で「male」「female」を振り分けて変換することになったのでした。
コンプラどうこう煩い昨今の英語圏なんだから、この男女表記は変えてくれねーかなあ!!