使用(?<!pattern) 负向后行断言正则表达式提取一个双引号开头和结尾的字符串

发布时间:2024年01月04日

如下是一段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。

在本例中我们只需要匹配字符串前后的引号,而不需要匹配以\开头的",就可以使用如下正则表达式:

(?<!\\)".*?(?<!\\)"

即只匹配前面没有反斜杠\",效果如下:

在这里插入图片描述

参考资料

《正则表达式的先行断言(lookahead)和后行断言(lookbehind)》

文章来源:https://blog.csdn.net/10km/article/details/135380473
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。