您的位置:首页 > 其它

匹配优先可能遇到的问题

2017-09-13 15:52 260 查看

简单的问题

其实在精通正则表达式六:匹配优先与忽略优先中已经看到了匹配优先的问题,比如我想匹配一段文本中引号中的内容,用匹配优先就会出现问题:



原本希望匹配的是”Welcome”和”hosted”,然而却得到了错误的结果,上篇文章已经写过,这里就不多加赘述。

现在来说说如何解决这个问题,首先可以用忽略优先量词:



还可以用排除型字符组:



用排除法时注意,‘^’只要用在‘[]’的里面才是排除,且要放在第一个。但有时候使用排除型字符组也会遇到一些问题,因为在大多数流派中‘[^”]’可以匹配换行符:



如果不想让表达式匹配换行符,可以用‘[^”\n]’:



但是‘.’不会匹配换行符,所以用忽略优先量词是没问题的。

复杂点的问题

如果在匹配HTML的文本时要获取标签里的内容,比如

<B>Billions</B> and <B> Zillions</B> of ...


我需要匹配
<B>和</B>
之间的内容。

首先肯定不能用排除型字符组,因为这些标签肯定不是单个字符,而排除型字符组里面的每个字符之间是或关系。这时可以用忽略优先量词:



注意‘<\/B>’中的‘\’是转义用的。

但忽略优先量词有时候也会出问题,比如现在要匹配这个:

<B>Billions and <B> Zillions</B> of ...




所以忽略优先量词并不能完美替代排除类,上面的例子也会出现这个问题:



回到现在的例子,现在即不能用忽略优先量词,有不能用排除型字符组,该如何解决这一类问题呢?用否定环视!



这时候不管是用匹配优先量词还是忽略优先量词都可以。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  正则表达式