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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10km

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值