[英]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.