php - 正则表达式 : Match string that can be or not at beginning or end of text

标签 php regex

我试图找到具有三种可能形式的字符串:

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/

相关文章:

php - Mysql 从表中选择每个唯一 location_id 和产品的日期最大的表

php - 简单的 htaccess 技巧

php - 使用 mysql/php 的 INSERT 语句中的 WHERE 子句

regex - 说服 meld 忽略特定的代码行?

php - PHP 循环内的脚本

php - block 中不显示 7 个按钮,但显示其他按钮

java - 正则表达式调优

php preg_replace 特定 html 注释标签之间的所有内容

java - 超大文件中的正则表达式搜索模式

java - String matches() 方法的奇怪行为