php去掉html标签中属性的双引号正则

$str="<span name=\"oldtitle\">啊哈撒地方了哈师大</span> ";
我用这个正则总是取不到东西

preg_match_all("(<span name=\"oldtitle\">(.*)<\/span>)", $body, $matches);
就是那个name属性的引号转义不成功,如果不加引号就可以,所以想吧引号去掉后再取,

要把$str变成这样

<span name=oldtitle>啊哈撒地方了哈师大</span>

应该怎么写
preg_match_all("(<span name=\"oldtitle\">(.*)<\/span>)", $str, $matches);

    双引号在正则表达式中并没有特殊意义,只做为普通字符使用

    preg_match_all中的正则表达式要放在界定符中

    要注意*的贪婪性

修改如下

preg_match_all('#(<span name="oldtitle">(.*?)<\/span>)#', $body, $matches);

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-04
你要取标签中间的内容?
如果去掉"" 想取中间的内容
preg_match_all("(<span name=oldtitle>(.*)<\/span>)", $str, $matches);
第2个回答  2013-09-04


$str='<span name="oldtitle">啊哈撒地方了哈师大</span>';
$str = preg_replace('#<span name="([^"]*)">(.*)</span>#', '<span name=\1>\2</span>', $str);
echo $str;

追问

name里面的值是特定的,因为我只要那一条span里的内容,别的不取

追答<?php
$str='<span name="oldtitle">啊哈撒地方了哈师大</span>';
if (preg_match('#<span name="oldtitle">(.*)</span>#', $str, $matches)) {
    print_r($matches);
}

$str='<span name="oldtitle">啊哈撒地方了哈师大</span>
<span name="oldtitle">啊哈撒地方了哈师大2</span>';
if (preg_match_all('#<span name="oldtitle">(.*)</span>#U', $str, $matches)) {
    print_r($matches);
}

相似回答