正则表达式是否包含字符串?


114

仅检查字符串是否包含某个单词(例如“测试”)的正则表达式是什么?我已经进行了一些谷歌搜索,但无法获得此类正则表达式的直接示例。这是针对构建脚本的,但与任何特定的编程语言无关。

Answers:


78

假定常规的PCRE样式正则表达式口味:

如果您要检查它作为一个单一,完整的字,这是\bTest\b,与不区分大小写相应的标志如果需要的话对你的编程语言的分隔符。\b表示“单词边界”,即字符之间的一个点,可以将单词视为开始或结束。例如,由于使用空格来分隔单词,因此空格的两边都会有单词边界。

如果要作为单词的一部分进行检查,则只是Test,并带有适当的标志,以区分大小写。注意,在这种情况下,专用的“子字符串”方法通常会更快,因为它消除了解析正则表达式的开销。


1
“” \b表示“单词边界”,即分隔两个单词(例如空格)的东西。 \b与空格不符;它是一个字符之间(在大多数情况下,在行的开头或结尾)匹配的断言。
斯特拉格

1
@strager:是的,您是对的-我的解释有点不准确。我会编辑。
Michael Madsen

117

只是不要锚定您的模式:

/Test/

上面的正则表达式将检查文本字符串“ Test”是否在其中找到。


2
谢谢,我不知道那是那么简单!我绝对没有在谷歌搜索中看到这一点。不锚定我的模式是什么意思?
GurdeepS 2011年

7
您可以锚定模式以分别与字符串的开头或结尾匹配,例如/ ^ Test /或/ Test $ /甚至是/ ^ Test $ /都可以完全匹配。该示例是致命的,因为它没有提供比相等性进行比较的好处,但是例如,在进行表单字段验证时,仅当字段包含至少一位数字且仅包含数字时,才匹配/ ^ \ d + $ /这样的正则表达式。
大卫·克拉克

-13

我迟了几年,但是为什么不呢?

[Tt][Ee][Ss][Tt]

4
这个答案出现在低质量的审阅队列中,大概是因为您没有解释代码。如果您确实解释了它(在您的答案中),您更有可能获得更多的支持-提问者实际上学到了一些东西!
帽子的家伙

6
这不是很一般化-​​假设您要搜索的单词是否来自用户。您将必须[Aa]为每个字母生成模式,并且很快就会变得非常难看。
白金天蓝色
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.