正则表达式只匹配字符串中的数字

时间:2018-05-02 17:31:41

标签: regex

示例我只需要在下面的字符串中使用数字。

lori ipsum 1, 2 e 3 dorm kietjiojwoijdej 162, 131 e 107 m²

lori fsdfsd ipsum 2 e 3 dormitórios fsrfsrfrfrfkietjiojwoijdej 162, 131 e 107 m²

lori ipsum dfs 3 dorm kidfsrfrfrffretjiojwoijdej 62, 13 e 10 m²

lori ipsum 1 dormitórios kietjiojwoijdej 16, 31 e 107 m²

所需的输出是:

[0] => 1, [1] => 2, [2] => 3

[0] => 2, [1] => 3

[0] => 3

[0] => 1

我尝试了以下正则表达式:

(\d(?= dorms))|(\d(?= dormitórios))

我的问题是逗号,空格和“e”字符,我不知道结果中的那个......

我的测试:regextest

1 个答案:

答案 0 :(得分:2)

使用您当前的正则表达式(\d(?= dorms))|(\d(?= dormitórios)),您只匹配3 dormitórios中的3和1 dormitórios中的1,因为在您的预测中,您指定了一个空格,后跟dorms| dormitórios

您不能与3 dorm中的3匹配,因为您使用(?= dorms)s

相反,您可以使用1个正面lookahead而不是2个可选的非捕获组(?:itórios)?来匹配这两个变体,并在您想要的单词之前和之后添加单词边界\b匹配。

\d(?=.*?\bdorm(?:itórios)?\b)

<强>详情

  • \d匹配一位数字
  • (?=非捕获组
    • .*?匹配任何字符零次或多次非贪婪
    • \b字边界
    • dorm(?:itórios)?匹配dormdormitórios
    • \b字边界
  • )关闭非捕获组