php 正则表达式匹配不以某些字符开始的字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 正则表达式匹配不以某些字符开始的字符串相关的知识,希望对你有一定的参考价值。
例如有如下字符串
$str='<li><span>1233455<span><li><li>fffffddf</li><li>fffffddf<span>122323</span></li><li>fffffdd<span>3455fsf</span>fwrw</li>';
我想要的结果是匹配出数组
array('0'=>'fffffddf<span>122323</span>','1'=>'fffffdd<span>3455fsf</span>fwrw');
即如果<li></li>之间字符时以<span>开头的话,那么就剔除这一项
所以按你需要的结果
$reg = '#<li>([a-z]+<span>[\w]*</span>[\w]*)</li>#i';
如果只是<li></li>之间字符时以<span>开头的话,那么就剔除这一项
$reg = '#<li>([a-z]+(?:<span>[\w]*</span>)?[\w]*)</li>#i'; 参考技术A <li>(?!<span>).*</span></li>
其中 (?!<span>) 代表不以 <span>开头
正则表达式:如何匹配不以前缀列表开头的子字符串
【中文标题】正则表达式:如何匹配不以前缀列表开头的子字符串【英文标题】:Regex: How to match substrings not starting with a list of prefixes 【发布时间】:2019-09-27 15:39:30 【问题描述】:我需要替换字符串中匹配的单词,但不包括这些单词的前缀列表。
The matchingWord should be replaced in the first line
But excludePrefix1.matchingWord , not in this line
Neither in this other line excludePrefix2.matchingWord
But again in this allowedPrefix.matchingWord
我成功地使用了一个带有单个前缀的正则表达式:
(?<!(excludePrefix1\.))matchingWord
但是如何使用几个排除的前缀来做到这一点?
我尝试过类似的东西:
(?<!((excludePrefix1\.)(excludePrefix2\.)))matchingWord
但这不起作用,请一位正则表达式专家帮助我们解决这个棘手的问题?
【问题讨论】:
【参考方案1】:在几个工具中,负后视必须是固定长度,对于您的问题,请使用多个后视:
(?<!excludePrefix1\.)(?<!excludePrefix2\.)matchingWord
【讨论】:
以上是关于php 正则表达式匹配不以某些字符开始的字符串的主要内容,如果未能解决你的问题,请参考以下文章