给定字符串“abcdefgh”我如何匹配所有以“abcde”开头的字符串,其不以“fgh”结尾?
更通用的任务 - 匹配以某些常见模式开头但不以任何预定义(排除)模式结尾的字符串。
"\babcde(^fgh)\b"
不工作
您可以使用正则表达式:
^foo(?!.*bar$).*$
匹配所有以 . 开头foo
但不以 . 结尾的字符串bar
。
该部分^foo
确保字符串以foo
和开头
该部分(?!.*bar$)
是否定的前瞻断言,以确保字符串不以bar
.
如果所需的前缀和排除的后缀可能不重叠,则可以使用负前瞻。通过“字符串”,我假设您的意思是“单词”:
"\babcde(?!\w*fgh\b)"
如果前缀和后缀可能重叠,则将前瞻移到前面
"\b(?!\w*fgh\b)abcde"
如果“字符串”是指“字符串”,则使用^
and$
作为边界条件:
"^(?!.*fgh$)abcde"
如果您也想获得匹配,而不仅仅是测试字符串,请将“字符串的其余部分”包含到正则表达式中:
"^(?!.*fgh$)abcde.*$"