Regex 随机字符串中的负前瞻
我想筛选以Regex 随机字符串中的负前瞻,regex,regex-lookarounds,negative-lookahead,Regex,Regex Lookarounds,Negative Lookahead,我想筛选以Model结尾但不以ViewModel结尾的单词。Model MyModel // - do match MyViewModel // - do not match 所以我认为这很容易,这种消极的前瞻应该足够好了。但是 它没有按我希望的方式工作。它也在匹配ViewModel ^[a-z]{2,99}(?!View)Model$ 模式(?!A)B将始终与B匹配,因为显然您没有同时查看A和B。要检查B之前的内容,可以使用(负片)查看后面: 那么为什么前瞻没有起作用呢 匹配过程如下(没
Model
结尾但不以ViewModel
结尾的单词。Model
MyModel // - do match
MyViewModel // - do not match
所以我认为这很容易,这种消极的前瞻应该足够好了。但是
它没有按我希望的方式工作。它也在匹配ViewModel
^[a-z]{2,99}(?!View)Model$
模式(?!A)B
将始终与B匹配,因为显然您没有同时查看A和B。要检查B之前的内容,可以使用(负片)查看后面:
那么为什么前瞻没有起作用呢
匹配过程如下(没有回溯)
模式(?!A)B
将始终与B匹配,因为很明显,您没有同时查看A和B。要检查B之前的内容,可以使用(负片)查看后面:
那么为什么前瞻没有起作用呢
匹配过程如下(没有回溯)
您可以将任何单词字符零次或多次匹配
\w*
,后跟ViewModel
,并在组中捕获2个或更多单词字符\w{2,}
,后跟Model
通过这种方式,您可以匹配您不想要的内容,并在小组中捕获您想要的内容
你的对手在第1组
详细信息
匹配零个或多个单词字符\w*
按字面匹配ViewModel
或|
在一组中捕获2个或多个单词字符,后跟Model(\w{2,}Model)
单词边界\b
\w*
,后跟ViewModel
,并在组中捕获2个或更多单词字符\w{2,}
,后跟Model
通过这种方式,您可以匹配您不想要的内容,并在小组中捕获您想要的内容
你的对手在第1组
详细信息
匹配零个或多个单词字符\w*
按字面匹配ViewModel
或|
在一组中捕获2个或多个单词字符,后跟Model(\w{2,}Model)
单词边界\b
并非所有的正则表达式风格都支持lookbehinds
(?
细分:
\b
匹配单词边界
(?!
开始负前瞻
\w*ViewModel\b
Word不应以ViewModel
)
前瞻结束
\w{2,}Model\b
匹配以Model
并非所有的正则表达式风格都支持lookbehinds
(?
细分:
\b
匹配单词边界
(?!
开始负前瞻
\w*ViewModel\b
Word不应以ViewModel
)
前瞻结束
\w{2,}Model\b
匹配以Model
你的风格/语言是什么?另外,你能分享更多关于什么应该匹配,什么不应该匹配的例子吗?我想你想看看后面。(?不(?!
@zzxyz似乎你是对的。虽然我不明白为什么会这样。你可能想把它作为答案发布。你的风格/语言是什么?另外,你能分享一些关于什么应该匹配什么不匹配的例子吗?我想你想看看后面。(?不是(?!
@zzxyz您似乎是对的。虽然我不明白为什么这样做有效。您可能想将其作为答案发布。我知道“前瞻”是错误的,但不太清楚为什么……我仍然不确定我是否理解此答案。我猜在“前瞻”中,视图
在某种程度上与左侧的内容相对应……或多或少“不管怎样”@zzxyz我添加了一些细节,这有帮助吗?是的,谢谢:)我基本上有一个正确的想法,但这确实巩固了它。我知道“前瞻”是错误的,但不太清楚为什么…我仍然不确定我是否得到了这个答案。我猜在“前瞻”中,视图
在某种程度上是锚定在左边的东西上的……这或多或少是“随便什么”“?@zzxyz我添加了一些细节,这有帮助吗?是的,谢谢:)我基本上有正确的想法,但这确实巩固了它。
MyView | ^[a-z]{2,99} // Match as much as we can
| (?!View) // No "View" ahead, so we're good
Model | Model // normal match
\b(?!\w*ViewModel\b)\w{2,}Model\b