RegEx电话号码后跟一些未知的文字然后一个字

时间:2016-06-10 17:06:58

标签: regex phone-number regex-lookarounds

我正在尝试编写一个匹配电话号码的正则表达式,后跟任意数量的字母,数字,可能的符号,直到我找到主题一词的下一个实例。

我几乎找到了一个解决方案,但它之前包含匹配数字,因为正则表达式太模糊了。嗯,这和我在正则表达式上吮吸的事实。

在示例中,它匹配第一个和第二个数字,直到单词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

1 个答案:

答案 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
?>

Try it online