我试图找到具有三种可能形式的字符串:
ab10
ab 10
ab-10
到目前为止,我已经设法创建了这个正则表达式,
/\s+[a-zA-Z]{2}[-|\s.]?\d{2,3}\s+/
适用于如下文本:
start foo ab 10 end foo.
当搜索的字符串位于文本的开头或结尾时出现问题,例如:
ab 10 end foo.
在这种情况下,开头没有空格。所以我需要匹配字符串是否在文本的开头(或结尾),但我不知道该怎么做
有人能帮我一点忙吗?
最佳答案
这应该可以解决您的问题:
/\b[a-zA-Z]{2}[-|\s.]?\d{2,3}\b/
\b
表示单词边界,它断言一侧(当前位置之前或之后)是非单词字符,另一侧是单词字符(由 \w
定义的单词字符)。
请注意,如果您有类似 #ab10.
的字符串, 然后 ab10
仍然会匹配。但是_ab10
不会给出匹配项,因为 _
是一个单词字符。
如果您想断言要搜索的字符串前后的字符必须是空白字符(由 \s
定义),或者行的开始/结束。我使用了后视和前视零宽度断言。
/(?<=^|\s)[a-zA-Z]{2}[-|\s.]?\d{2,3}(?=\s|$)/
上面的正则表达式不会在 #ab10.
中找到任何匹配项或 ab10.
关于php - 正则表达式 : Match string that can be or not at beginning or end of text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13493423/