Как решить проблему, когда найти весь текст соответствует регулярному выражению в Perl? - PullRequest
0 голосов
/ 05 октября 2019

Я хочу получить соответствие всего текста с регулярным выражением даты в заданной строке, но я не получаю ожидаемого результата

У меня есть строка, подобная этой "Lomba lari akan diadakan pada tanggal 15 Agustus 2019"

@dates2 = $line =~ m/(\d{1,2}\s(Januari|Februari|Maret|April|Mei|Juni|Juli|Agustus|September|Oktober|November|Desember)\s\d{4})/g;
    $length2 = @dates2;
    print "@dates2\n";
    print "Length 2 : $length2\n";
    $date_occurence += $length2;

Я хочу получить только «15 Agustus 2019» в массиве даты2, но я получил «15 Agustus 2019» и «Agustus». Кто-нибудь может сказать мне, как работает код регулярного выражения?

1 Ответ

2 голосов
/ 05 октября 2019

Вы получаете Agustus в выводе из-за чередования месяцев (Januari|...|Desember), которое является группой захвата. Чтобы удалить его, просто сделайте свое внутреннее чередование без захвата, т.е.

(?:Januari|Februari|Maret|April|Mei|Juni|Juli|Agustus|September|Oktober|November|Desember)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...