匹配不在预定义部分结束的字符串

时间:2012-11-19 11:27:17

标签: java regex

给定字符串“abcdefgh”我如何匹配以“abcde”开头的所有字符串,它们不以“fgh”结尾?

更通用的任务 - 将字符串startin与某些常见模式匹配,但不以任何预定义(排除)模式结束。

"\babcde(^fgh)\b" 

不起作用

2 个答案:

答案 0 :(得分:0)

您可以使用正则表达式:

^foo(?!.*bar$).*$

匹配以foo开头但不以bar结尾的所有字符串。

部分^foo确保字符串以foo

开头

部分(?!.*bar$)是负前瞻断言,以确保字符串不会以bar结尾。

See it

答案 1 :(得分:0)

如果所需的前缀和排除的后缀可能不重叠,则可以使用否定前瞻。通过“字符串”,我假设你的意思是“单词”:

"\babcde(?!\w*fgh\b)"

如果前缀和后缀可能重叠,请将前瞻移到前面

"\b(?!\w*fgh\b)abcde"

如果“字符串”表示“字符串”,请使用^$作为边界条件:

"^(?!.*fgh$)abcde"

如果你想获得匹配,而不是仅仅测试字符串,请将“字符串的其余部分”包含在正则表达式中:

"^(?!.*fgh$)abcde.*$"