明らかに小ネタな話であるが、PHPとかのつもりでJavaのRegexでパターンマッチさせると、マッチしないと勘違いするかもしれないという話。
Javaで単純にRegexに文字列がマッチしているか否かを知るには、以下のようなコードを使う。
java.lang.String str = "…";
str.matches(regex);java.util.regex.Pattern.matches(regex, str);
java.util.regex.Pattern pattern = java.util.regex.Pattern.complie(regex);
java.util.regex.Matcher matcher = pattern.matcher(str);
matcher.matches();
いずれにしろ、java.util.regex.Patternがregexで記述されたパターンを処理している。
ところで、PHPでパターンマッチさせるときには、だいたい、PCRE(Perl互換正規表現)を使うわけだが、そこで単純なパターンマッチは、pcre_match(pattern, str);
となる。
例えば、文字列の先頭が"prefx"という文字列で始まっているかどうかを知るには、PHPではpcre_match('/^prefix/', str) > 0
と書く。
そこで、同じ感じでJavaで書くと、java.util.regex.Pattern.matches("^prefix", str);
と書きたくなる。しかし、こう書いてしまうとうまくマッチしてくれないのである。
それは、Regexでは、パターンに完全にマッチしてないとだめなのである。
すなわち、Javaではjava.util.regex.Pattern.matches("^prefix.*", str);
と書いてあげないとマッチしないということになる。
0 件のコメント:
コメントを投稿