示例我只需要在下面的字符串中使用数字。
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
答案 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
匹配一位数字(?=
非捕获组
.*?
匹配任何字符零次或多次非贪婪\b
字边界dorm(?:itórios)?
匹配dorm
或dormitórios
\b
字边界)
关闭非捕获组