Heim > Backend-Entwicklung > PHP-Tutorial > 正则表达式,需用到 负向零宽断言

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

WBOY
Freigeben: 2016-06-13 12:19:35
Original
1037 Leute haben es durchsucht

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

<a>123456</a><br />7890234<br /><a>123<br />789</a>
Nach dem Login kopieren

我只想匹配到 不在 里面的内容,即需要匹配到
7890234<br /><a>123<br />789</a>
Nach dem Login kopieren

以下是我自己写的正则,但是没成功,望指教
(?!<a.*?)\d+(?!.*<\/a>)
Nach dem Login kopieren

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

$str = <<<a>123456</a><br />7890234<br /><a>123<br />789</a>
EOF;
// 手册里面有一个 (?!pattern) 负向预查 应该就是 "负向零宽断言" 的意思吧
preg_match_all('/(?<=)\d+(?=<\/a>)/',$str,$m);// [0] => 123456
preg_match_all('/(?)\d+(?!<\/a>)/',$str,$t1);
/*
相邻的数字没有获取到
[0] => 2345
[1] => 7890234
[2] => 23
[3] => 78
单独测试 123
也是只能获取到 23
*/

$str_space = <<
123456
7890234
123
789

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 "
Nach dem Login kopieren
";

------解决思路----------------------
只匹配到 123456 是很容易的
你把它删了,剩下的不就是你要的了吗?
$s =<<< TXT
<a>123456</a><br />7890234<br /><a>123<br />789</a>
TXT;

$p = '#\d+[\r\n]+#';
preg_match_all("/[^\r\n]+/", preg_replace($p, '', $s), $m);
print_r($m);
Nach dem Login kopieren
Array<br />(<br />    [0] => Array<br />        (<br />            [0] => 7890234<br />            [1] => <a>123<br />            [2] => 789</a><br />        )<br /><br />)<br /><br />
Nach dem Login kopieren

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

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage