正则表达式不允许部分匹配

时间:2013-05-02 09:21:15

标签: regex match partial

好的,首先我与正则表达式关系紧张。我通常可以设法抓住或验证我需要的数据。但现在真的感觉我已经打到正则表达墙了。

我已经将我需要验证的用户数据串连接在一起 它们看起来像:john|45|some|data|00111{more|data
{more|data - 部分应该能够发生0次或更多次,但如果我只使用(regex)*。然后,如果一个部分失败,则该字符串仍然部分匹配。我想让它在这种情况下失败。

为了简化我的案例:我希望foofoobarfoobarbar进行验证。但是foobarcarfoobat无法通过验证。

foo(?:bar)*将匹配所有(最后2个仅部分)

...如果可能的话我想保持"不要捕捉"部分(?:)。

据我所知,解决方案可能在LookAround中,代码中的DontAllowPartialMatches参数,或者拆分字符串并单独验证部件......

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

使用$明确匹配字符串的结尾(或可能是行,取决于您的方言):

foo(?:bar)*$

这将匹配foo,foobar,foobarbar等,但不是foobarcar或foobat,如你所愿。

(它也会匹配barfoobar,所以如果这是一个问题,你可能也想使用^来明确地匹配开头。^foo(?:bar)*$