Ответ 1
Метод Java matches
проверяет, соответствует ли регулярное выражение всем String
. Чтобы проверить, можно ли найти регулярное выражение в любом месте строки, создайте Matcher
и используйте find
.
Я понимаю, что реализация регулярных выражений Java основана на Perl. Однако в следующем примере, если я выполняю одно и то же регулярное выражение с той же строкой, Java и Perl возвращают разные результаты.
Здесь пример Java:
public class RegexTest {
public static void main( String args[] ) {
String sentence = "This is a test of regular expressions.";
System.out.println( sentence.matches( "\\w" ) ? "Matches" : "Doesn't match" );
}
}
Это возвращает: не соответствует
Здесь пример Perl:
my $sentence = 'This is a test of regular expressions.';
print ( $sentence =~ /\w/ ? "Matches" : "Doesn't match" ) . "\n";
Это возвращает: Соответствует
Для меня результат Perl имеет смысл. Он ищет совпадение для символа одного слова. Я не понимаю, почему Java не считает это совпадением. Какая причина разницы?
Метод Java matches
проверяет, соответствует ли регулярное выражение всем String
. Чтобы проверить, можно ли найти регулярное выражение в любом месте строки, создайте Matcher
и используйте find
.
Кроме того, синтаксис regex Perl не является синтаксисом Java Regex.
В этом случае это не обязательно, но это более ответ на ваш более общий вопрос.
Java имеет синтаксис регулярного выражения, известный как "PCRE", то есть: Perl Compatible.
Это имя, однако, грубо вводит в заблуждение, потому что в нем очень мало, что действительно совместимо с Perl.
Например, регулярные выражения Perl позволяют выполнять код в самом выражении, а множество других расширенных операторов и некоторый синтаксис различны в Perl, так как они находятся на других языках (например, на многих языках используются \>
и \<
как маркеры границ слов, но Perl просто использует '\ b')
Проведите несколько минут, чтобы прочитать некоторые из PerlRe Documentation, и вы обнаружите множество потрясающих трюков, которые может использовать механизм регулярного выражения Perl ничего больше не кажется.