我正在尝试编写一个匹配电话号码的正则表达式,后跟任意数量的字母,数字,可能的符号,直到我找到主题一词的下一个实例。
我几乎找到了一个解决方案,但它之前包含匹配数字,因为正则表达式太模糊了。嗯,这和我在正则表达式上吮吸的事实。
在示例中,它匹配第一个和第二个数字,直到单词Subject,我只希望它获得最接近单词“Subject”的数字,而数字仍然在单词之前。我需要在文档中检测到多个这样的实例。文本可能会分散多行。我需要捕获的唯一部分是电话号码,其余部分将是无捕获组。
我甚至可以单独在RegEx中执行此操作吗?或者我是否必须开始用另一种语言剥离东西?如果重要的话,这将进入PHP脚本。
示例
正则表达式
([0-9]{3}\-[0-9]{3}\-[0-9]{4})(?:\w|\s|\-|\')+\bSubject\b
部分:
123-456-7890 - ABC WHAT
MERICA RULES
987-654-3210 - ABC WHAT WORDS MORE WORDS 123456789123
LOREM IPSOM WHO CARES - Subject
答案 0 :(得分:0)
您可以将所有内容与g
lobal修饰符匹配,然后进行最后一场比赛吗?
/(\d{3}-\d{3}-\d{4})(?=.*\bSubject\b)/sg
s
ingle行使.
也匹配换行符。
在PHP中:
<?php
$input = '123-456-7890 - ABC WHAT
MERICA RULES
987-654-3210 - ABC WHAT WORDS MORE WORDS 123456789123
LOREM IPSOM WHO CARES - Subject
ANOTHER NOT MATCHES BECAUSE AFTER subject 111-111-1111';
preg_match_all('/(\d{3}-\d{3}-\d{4})(?=.*\bSubject\b)/s', $input, $matches);
echo array_pop($matches[1]); // 987-654-3210
?>