Regex 正则表达式,perl在特定文本之前匹配数字

Regex 正则表达式,perl在特定文本之前匹配数字,regex,perl,Regex,Perl,请澄清我有一堆格式错误的文本文件,我必须从那里获取数据。 文本示例: my $content = "Abracadabra 10 anbracadabra 20 blah \n blah 1220 blah \nblah IMPORTANT blah blah 10 abracadabra 10" 我要去1220。即从左到右最接近“重要”的数字序列。 问题是序列可以有任意数量的数字。 我做了一个表达式,它可以工作,但我必须告诉你确切的数字是多少: my ($number) = $content

请澄清我有一堆格式错误的文本文件,我必须从那里获取数据。 文本示例:

my $content = "Abracadabra 10 anbracadabra 20 blah \n blah 1220 blah \nblah IMPORTANT blah blah 10 abracadabra 10"
我要去1220。即从左到右最接近“重要”的数字序列。 问题是序列可以有任意数量的数字。 我做了一个表达式,它可以工作,但我必须告诉你确切的数字是多少:

my ($number) = $content=~m/.*(\d\d\d\d).*?IMPORTANT/gs
类似(\d+)的任何内容显然只给出了最后一位数字

如果可能,请给出一些解释,而不是简单的代码。
谢谢大家!

您可以使用此正则表达式:

\b(\d+)\D*?IMPORTANT
  • 使用单词边界匹配捕获组中的一个或多个数字,即
    \b(\d+)
  • 后跟0或更多非数字
    \D*?
    (非贪婪)
  • 后跟文字
    重要

例如,它在捕获组中给出了
1220

谢谢!是的,它可以工作,在我的示例中,我的\d+模式也可以工作。。。我想我太聪明了,举了个错误的例子:-(我在regex101上做了一个更好的链接…我希望结果是>29<,而不是>2011<,但你的链接与我的演示链接相同。抱歉,匆忙浪费了时间…看起来它现在可以工作了?感谢Anubhava回复得这么快,现在是凌晨3点,我已经失去了所有良好睡眠的希望,因为我在6-30点醒来…它的4点也在这里:)。很高兴知道答案是正确的,您可以点击我答案左上角的勾号,将答案标记为已接受。