【发布时间】:2013-10-16 02:13:12
【问题描述】:
当我尝试这个正则表达式时
\"(\S\S+)\"(?!;c)
在这个字符串 "MM:";d 上它是我想要的匹配
在这个字符串 "MM:";c 上,它与期望的不匹配。
但是当我添加第二个组时,通过在该组内移动分号并使用 | 使其成为可选
\"(\S\S+)\"(;|)(?!c)
对于这个字符串 "MM:";c,它与我之前预期的不一样。
我在 Java 上尝试过这个,然后在 Javascript 上使用 Regex 工具 debuggex:
This link contains a snippet of the above
我做错了什么?
注意 |所以没有必要有分号。同样在示例中我放了 c,它只是示例中单词的替代品,这就是我使用否定前瞻的原因。
在遵循 Holgers 对使用所有格量词的反应后,
\"(\S\S+)\";?+(?!c)
【问题讨论】:
-
您似乎有“半个 OR 语句”
(;|)there - 这是故意的吗?对我来说,这似乎意味着“要么是分号,要么什么都没有”。所以匹配是正确的? -
我用它来使分号可选
-
最好使用问号:
;?。这意味着完全相同的东西,但它增加了更少的混乱,并且你会得到更少的 cmets 询问这是否是你真正的意思。 ;) -
有什么理由不简单地使用
^"(\S+)";?[^c]$? -
这是我在调试后想出的简化版本,以找出导致错误的原因。我需要将分号作为一个组捕获,因为我将在实际代码中对其进行扩展。
标签: java javascript regex negative-lookahead