1

我试图在地址末尾提取一个单独的#,但前提是不在某些指定之后。

这是我正在测试的正则表达式:

/(?<!apt|appt|appartment|ste|suite|box)[,.]? ?# ?([0-9]+)$/i

在这种情况下,正则表达式应该会失败:

123 W Somewhere St Apt # 321

正则表达式应该在此找到匹配项:

123 W Somewhere St # 321

但是,它与上述两者都匹配。

我发现如果我[,.]? ?# ?改为简单,#那么它就可以工作。

但是,这意味着简单地删除一个空格或在地址中添加一个句点就会把它扔掉。

在这种情况下,如何让我的消极后视工作并让我的正则表达式保持灵活?

在 PHP 5.3 中实现。

4

1 回答 1

1

在这种情况下,您不能使用lookbehind(后面带有可选内容),但您可以使用以下替代方法:

/(?!\b(?:apt|appt|appartment|ste|suite|box))\b\w+[,.]? ?# ?\K[0-9]+/i

\K重置之前的所有比赛。

于 2013-10-17T12:55:58.283 回答