Почему регулярные выражения в Java и Perl действуют по-разному? - PullRequest
14 голосов
/ 24 апреля 2009

Насколько я понимаю, реализация регулярных выражений в 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 не считает это совпадением. В чем причина разницы?

Ответы [ 2 ]

31 голосов
/ 24 апреля 2009

Метод Java matches проверяет, соответствует ли регулярное выражение всему String. Чтобы проверить, можно ли найти регулярное выражение где-либо в строке, создайте Matcher и используйте его find метод.

10 голосов
/ 24 апреля 2009

Кроме того, синтаксис регулярных выражений Perl НЕ синтаксис регулярных выражений Java.

В данном случае это не обязательно, но это более ответ на ваш более общий вопрос.

Java имеет синтаксис регулярных выражений, известный как «PCRE», то есть: совместимый с Perl.

Это имя, однако, вводит в заблуждение, потому что в нем очень мало того, что действительно совместимо с Perl.

Например, регулярные выражения Perl позволяют выполнять код в самом выражении, а также множество других расширенных операторов, и некоторые синтаксисы в Perl отличаются от других языков (т. Е. Многие языки используют \> и \< в качестве маркеров границы слова, но Perl просто использует '\ b')

Потратьте несколько минут, чтобы прочитать документацию PerlRe , и вы обнаружите множество удивительных трюков, которые может сделать движок регулярных выражений Perl, чего, похоже, больше ничего не делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...