繁体   English   中英

Java RegEx:非常特定的匹配

[英]Java RegEx: Very Specific Match

我试图在所有情况下都匹配连字符,除非它前面是空格,而前面是非空格。

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

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

谢谢!

编辑的准确性。

可以使用负向后看断言和正向超前断言( docs ):

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

表示:匹配任何连字符(不带空格)或(带空格)。 根据De Morgan的定律 ,这与说“ (在空格前)和(在非空格前进行)”相同。

您可以采用多种选择,每种情况下一种:

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

可以缩短此逻辑(以牺牲一些可读性为代价)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM