首页 > 解决方案 > 在perl中查找所有文本匹配正则表达式时如何解决问题?

问题描述

我想在给定的字符串上获取与日期正则表达式匹配的所有文本,但我没有得到预期的结果

我有这样的字符串“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;

我只想在数组 dates2 中得到“15 Agustus 2019”,但我得到了“15 Agustus 2019”和“Agustus”。任何人都可以告诉我匹配正则表达式代码是如何工作的?

标签: regexperl

解决方案


Agustus由于月份交替(Januari|...|Desember)是一个捕获组,您将进入输出。要删除它,只需使您的内部交替不捕获即

(?:Januari|Februari|Maret|April|Mei|Juni|Juli|Agustus|September|Oktober|November|Desember)

推荐阅读