• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

正则表达式,需用到 负向零宽断言

php 搞代码 4年前 (2022-01-24) 24次浏览 已收录 0个评论

求一个正则表达式,需用到 负向零宽断言
内容

123456<br />7890234<br />123<br />789

我只想匹配到 不在 里面的内容,即需要匹配到

7890234<br />123<br />789

以下是我自己写的正则,但是没成功,望指教

(?!)

——解决思路———————-
没有解决你的问题,但是在解决的过程中遇到了一个奇怪的问题

<br />$str = <<<EOF<br />123456<br />7890234<br />123<br />789<br />EOF;<br />// 手册里面有一个 (?!pattern) 负向预查 应该就是 "负向零宽断言" 的意思吧<br />preg_match_all('/(?)/',$str,$m);// [0] => 123456<br />preg_match_all('/(?)/',$str,$t1);<br />/*<br />与  或  相邻的数字没有获取到<br />[0] => 2345<br />[1] => 7890234<br />[2] => 23<br />[3] => 78<br />单独测试 123<br />也是只能获取到 23<br />*/<br /><br />$str_space = <<<EOF<br /> 123456 <br />7890234<br /> 123<br />789 <br />EOF;<br />preg_match_all('/(?)/',$str_space,$t2);<br />/*<br />而在  或  相邻的数字加一个空格就可以了<br />[0] => 123456<br />[1] => 7890234<br />[2] => 123<br />[3] => 789<br />*/<br />echo "<pre class="prettyprint linenums">";<br />print_r($m);<br />print_r($t1);<br />print_r($t2);<br />echo "

“;

——解决思路———————-
只匹配到 123456 是很容易的
你把它删了,剩下的不就是你要的了吗?

$s =<<< TXT<br />123456<br />7890234<br />123<br />789<br />TXT;<br /><br />$p = '#\d+[\r\n]+#';<br />preg_match_all("/[^\r\n]+/", preg_replace($p, '', $s), $m);<br />print_r($m);
Array<br />(<br />    [0] => Array<br />        (<br />          <i style="color:transparent">本¥文来源gaodai$ma#com搞$代*码*网(</i><strong>搞代gaodaima码</strong>  [0] => 7890234<br />            [1] => 123<br />            [2] => 789<br />        )<br /><br />)<br /><br />

必须说明的是:php 的正则表达式并没有完全实现现代正则表达式的全部功能,有关断言的实现是残缺的
如果你是想学习一下正则表达式,那么就应在 C#、Java 环境中进行
如果你是需要实际使用,那么就应开动脑筋,变通的使用

正则表达式的支持是由 PCRE(Perl Compatible Regular Expression)库提供的,这是个开放源代码的软件,作者为 Philip Hazel,版权属于英国剑桥大学。可于以下地址获得:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:正则表达式,需用到 负向零宽断言

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址