RegExp在模式后的空格和文本上不匹配

RegExp在模式后的空格和文本上不匹配,regex,Regex,我有一个多行模式,我扫描一个字符串。目标是匹配组成帐号的一系列数字。如果字符串/行以http | https开头,则模式可以忽略该行。我忽略了整个模式中的案例敏感性。我仅在数字周围创建边界。数字的长度范围从12位到19位 以下是正则表达式: (?mi)^(?!https?:).*(\b(50[0-9]{10,17}))$ 示例测试: 501234567890 嗨,鲍勃,这是你要的:501234567890。你收到了吗 嗨,史蒂文,这是你要的501234567890,收到了吗 (?#这应该被忽

我有一个多行模式,我扫描一个字符串。目标是匹配组成帐号的一系列数字。如果字符串/行以http | https开头,则模式可以忽略该行。我忽略了整个模式中的案例敏感性。我仅在数字周围创建边界。数字的长度范围从12位到19位

以下是正则表达式:

(?mi)^(?!https?:).*(\b(50[0-9]{10,17}))$
示例测试:

  • 501234567890
  • 嗨,鲍勃,这是你要的:501234567890。你收到了吗
  • 嗨,史蒂文,这是你要的501234567890,收到了吗
  • (?#这应该被忽略)
  • (?#这应该被忽略)
  • 这是我的公司账号:501234567890
  • 501234567890
第二行和第三行不匹配。第六行匹配,因为数字后面没有空格。第七行不匹配,因为数字前有空格

我在数字模式前后尝试过[^a-zA-Z\s],但不起作用

如有建议,将不胜感激

谢谢


Russ

只需将
$
替换为单词边界
\b

(?mi)^(?!https?:).*(\b(50[0-9]{10,17}))\b

您是否需要正则表达式模式末尾的
$
?您是正确的。我测试了这个变化,它正是我所需要的。你能解释一下原因吗?我有几种类似的模式,我需要理解这种变化背后的理论。模式前的\b表示仅匹配整个“单词”。“边界”一词是否需要像“后面和结尾”这样的指称?谢谢您的帮助。@rray:word boundary
\b
是一种零长度断言,它匹配单词字符
\w
(或
[A-zA-Z0-9\
)和非单词字符
\w
(或
[^A-zA-Z0-9\
)之间的“边界”。请参见此处的更多信息: