如下是一段java代码,我想用正则表达从中提取代码中的字符串
cond_buffer.append(" ORDER BY \"name\" \"").append(join(order_by_column,"\","));
java是通过前后用双引号包含定义字符串的。但简单使用正则表达式".*?"是不可行的,因为会将" ORDER BY \"name\" \""中的\"识别为字符串边界引号而非字符串的一部分,效果如下

为了解决\"误识别问题,就要用到正则表达零宽负向后行断言(zero-width negative lookbehind assertion)即(?<!pattern)
(?<!pattern) 负向后行断言代表字符串中的一个位置,紧接该位置之前的字符序列不能匹配 pattern。
例如对 “regex represents regular expression” 这个字符串, (?<!\w)re可以匹配单词开头的 re,但不匹配单词内部的 re。
在本例中我们只需要匹配字符串前后的引号,而不需要匹配以\开头的",就可以使用如下正则表达式:
(?<!\\)".*?(?<!\\)"
即只匹配前面没有反斜杠\的",效果如下:

本文讲述了如何在Java代码中,通过正则表达式避免误识别双引号中的转义字符,利用零宽负向后行断言提取字符串,提供了一个实例并引用了相关参考资料。
1250

被折叠的 条评论
为什么被折叠?



