正则表达式:匹配字符串中的子串

3
我希望能用这个正则表达式来捕获一个字符串:
```

我想使用此正则表达式捕获一个字符串:

```
^([\d]_[a-z|A-Z]+_test)$

所以它会捕获像这样的内容:1_mytest_test

然而,如果该字符串在另一个字符串中,比如:

results.1_mytest_test.=fail, more info

没有匹配项。

我以为使用^$可以标记我要查找的字符串的开头和结尾,是吗?


移除 ^$,以及 | - Wiktor Stribiżew
哦,哇,但为什么呢? - Kingamere
\b\d_[a-zA-Z]+_test\b - anubhava
1个回答

6
你需要删除正则表达式的^/$锚点,如果你不需要使用正则表达式匹配一个字面上的|字符,则不需要在字符类中使用|
\d_[a-zA-Z]+_test

请见正则表达式演示 符号^为字符串的开始,而$为字符串的结尾,这样它们就可以“锚定”你要匹配的字符串的开头和结尾。
至于符号|,字符类仅匹配一个字符[a-zA-Z]匹配一个字母。这里不需要使用备选运算符|,因为它会被字面上对待(即[a-zA-Z|]将匹配输入字符串中的|符号)。
只是让你知道:在许多情况下,如果你需要匹配较大字符串中的某些内容,你需要使用单词边界\b来匹配整个单词。
\b\d_[a-zA-Z]+_test\b

然而,有时模式中会包含非单词字符,在这种情况下使用正则表达式的前后查找是最安全的选择(不确定你的引擎是否支持后向查找,但以下是一个适用于例如PCRE的版本):

(?<!\w)\d_[a-zA-Z]+_test(?!\w)

1
但是 ^$ 不是标记我想匹配的字符串的开头和结尾吗? - Kingamere
插入符号(^)告诉正则表达式引擎从开头开始查找数字(\d),然后从左到右匹配所有子模式,而 _test 必须在字符串末尾。如果指定了 /m(多行)修饰符,则可以匹配一行。 - Wiktor Stribiżew
我还添加了一些有趣的细节 :) 祝你有美好的一天! - Wiktor Stribiżew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接