> 백엔드 개발 > PHP 튜토리얼 > 求一个正则表达式,需用到 负向零宽断言

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

WBOY
풀어 주다: 2016-06-23 13:34:58
원래의
1487명이 탐색했습니다.

内容

<a>123456</a>7890234<a>123789</a>
로그인 후 복사

我只想匹配到 不在 里面的内容,即需要匹配到
7890234<a>123789</a>
로그인 후 복사

以下是我自己写的正则,但是没成功,望指教
(?!<a.*?)\d+(?!.*<\/a>)
로그인 후 복사


回复讨论(解决方案)

只好在线等了

123789 不也是在 里,难道你是要匹配不在第一个 里出现的字符?
那用字符串处理函数可能可以,找到第一个 ,取头尾位置,再处理字符串。

建议你先讲字符串按回车分隔,对每个子字符串再进行正则匹配,不知道是否符合你的意思

我现在主要是想搞懂 负向零宽断言 的意思,不知哪位高人能写出此正则

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

$str = <<)\d+(?=<\/a>)/',$str,$m);// [0] => 123456preg_match_all('/(?)\d+(?!<\/a>)/',$str,$t1);/*与  相邻的数字没有获取到[0] => 2345[1] => 7890234[2] => 23[3] => 78单独测试 123也是只能获取到 23*/$str_space = << 123456 7890234 123789 EOF;preg_match_all('/(?)\d+(?!<\/a>)/',$str_space,$t2);/*而在  相邻的数字加一个空格就可以了[0] => 123456[1] => 7890234[2] => 123[3] => 789*/echo "
";print_r($m);print_r($t1);print_r($t2);echo "
로그인 후 복사
";

有劳各位了

早上好啊,该问题没办法了吗

只匹配到 123456 是很容易的
你把它删了,剩下的不就是你要的了吗?

$s =<<< TXT<a>123456</a>7890234<a>123789</a>TXT;$p = '#\d+[\r\n]+#';preg_match_all("/[^\r\n]+/", preg_replace($p, '', $s), $m);print_r($m);
로그인 후 복사
Array(    [0] => Array        (            [0] => 7890234            [1] => <a>123            [2] => 789</a>        ))
로그인 후 복사

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

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿