Java RegEx:非常具体的匹配

时间:2011-03-20 03:13:21

标签: java regex

我试图在所有情况下匹配一个连字符,除非它前面有空格并且由非空格继续。

x-y   //match
x - y //match
x- y  //match
x -y  //not match

我希望正则表达式根据上述要求确定匹配,但只捕获负号。这可能吗?

谢谢!

编辑准确性。

2 个答案:

答案 0 :(得分:4)

可以使用负面的lookbehind和一个积极的前瞻断言(docs):

(?<!\s)-|-(?=\s)

其中说:匹配任何连字符(不以空格开头)或(以空格开头)。根据{{​​3}},这与说“ not (以空格开头)和(由非空格开头)”相同。

答案 1 :(得分:0)

您可以使用多种替代方案,每种方案一种:

Pattern regex = Pattern.compile(
    "  (?<=\\S)-(?=\\S)  # x-y   //match\n" +
    "| (?<=\\s)-(?=\\s)  # x - y //match\n" +
    "| (?<=\\S)-(?=\\s)  # x- y  //match", 
    Pattern.COMMENTS);

这种逻辑可能会缩短(以牺牲一些可读性为代价)。