使用正则表达式匹配字符串中的一个匹配项

时间:2010-10-21 09:01:18

标签: regex

前几天我坐着一个正则表达式问题。最终我用不同的方式解决了它,没有正则表达式,但我仍然想知道你是怎么做的:)

我遇到的问题是通过自动脚本运行svn update,我想检测冲突。使用或不使用正则表达式执行此操作是微不足道的,但它让我想到了一个更加模糊的问题:如何在空白的固定长度字段内完全匹配一个字符?

例如,假设我们想在6字节宽的字段内匹配“C”:

"C     " MATCH
"   C  " MATCH
" C C  " NO MATCH
"  M   " NO MATCH
"      " NO MATCH
"C      " NO MATCH (7 characters, not 6)
"   C " NO MATCH (5 characters, not 6)

3 个答案:

答案 0 :(得分:7)

我知道回答你自己的问题是不对的,但我基本上把你的答案合并了......请不要火焰:)

^(?=.{6}$) *C *$

编辑: 更换。 Tomalak的反应低于[C],速度提高了约4-5%左右

^(?=[ C]{6}$) *C *$

答案 1 :(得分:5)

^(?=[ C]{6}$) *C(?! *C)

说明:

^             # start-of-string
(?=[ C]{6}$)  # followed by exactly 6 times " " or "C" and the end-of-string
 *C           # any number of spaces and a "C"
(?! *C)       # not followed by another C anywhere (negative lookahead)

注意:

  • ^(?=…{6}$)构造可以在任何想要测量字符串长度的地方使用,但实际上并不匹配。
  • 由于字符串的结尾已在前瞻中检查过,因此您无需在正则表达式的末尾放置$,但这样做并没有什么坏处。

答案 2 :(得分:4)

^[^C]*C[^C]*$

但这不会验证字符串的长度。