$str = '<img src="xxx"><b>aaa</b><br>\n<b>b\nbb</b><span style="color:#FF0000">yyy</span>'
$pattern = '/<b>(((?!<\/b>).)*)<\/b>/mi'
preg_match_all($pattern, $str, $matches, PREG_SET_ORDER)
print_r($matches)
输出
Array
(
[0] =>Array
(
[0] =><b>aaa</b>
[1] =>aaa
[2] =>a
)
[1] =>Array
(
[0] =><b>b\nbb</b>
[1] =>b\nbb
[2] =>b
)
)
$matches[0][0],$matches[1][0] 是你想要的结果?
恕我直言(奥巴马更爱说这个词),你对正则表达式和你提供的这些代码的作用一无所知[ATTACHMENT]和正则表达式没有关系,推断是DISCUZ等用到的BBCODE,你的目的就是用正则表达式把<a href="xxx.php?filename=abc.jpg">图片</a>这样的HTML替换成
[ATTACHMENT]abc.jpg[/ATTACHMENT]
So,
你提供的$_pattern的0和1元素分别是正则表达式和要替换成的字符。
简要说一下,匹配的正则表达式里的()中间的内容可以在被替换的字符串中的$1,$2等表示。
看正则表达式有3个括号,第二个和第三个分别匹配文件名和扩展名
所以,要替换成的字符串中的$2和$3将是文件名和扩展名
于是,
以上的实例被替换的结果是
[ATTACHMENT]abc.jpg[/ATTACHMENT]
at last and the point
系统学习正则表达式,他是非常有用的
by the way,20分对我来说根本不算什么,写这几句话的功夫20元都挣上了
只是想帮帮你
一定要用正则么?PHP的函数可以么?<?php
$str = '<br />sdfasdfsdfa<a>sdfasdf<br>dsfasdfasdf<li>sdfa'
$str = strip_tags($str, '<br>')
echo $str
?>
会比用正则效率高不少