正则表达式要求匹配不出现某几个连续字符的字符串

1,<strong>:</strong> a person who pays a fixed sum for some privilege or source of income </span>
2,<strong>:</strong> a person who pays a fixed sum for some privilege or <a href="/dirname/something.html">beauty girl</a> source of income </span>
我想得到<strong>:</strong>
之后到</span>前的所有字符。用preg_match_all('/<strong>:<\/strong>([^<]*)</span>/',$str,$matches),$matches只能得到第一个字符串,第二个取不出来。
用preg_match_all('/<strong>:<\/strong>([^<]*[^<][^\/]+)</span>/',$str,$matches)也不行。
关键是忽略掉字符串中的一些标签,如a div table span这种
$str = file_get_contents('http://www.merriam-webster.com/dictionary/butcher');
preg_match_all('/<strong>:<\/strong>([^<]*)<\/span>/',$str,$matches);

echo '<pre>';
print_r($matches);
echo '</pre>';
我只是想把上面那个页面源代码中<strong>:</strong> 到</span>中的字符串取出来,之间忽略任意HTML 标签,直到遇到第一个</span>结束

第1个回答  2014-06-23
试试这个

preg_match_all('/<strong>:<\/strong>([\s\S]*)</span>/',$str,$matches)追问

没管用,

追答

什么语言啊,去掉/可以么?你说的忽略是直接不要那些内容,还是什么意思?

preg_match_all('<strong>:</strong>([\s\S]*)</span>',$str,$matches)


追问

preg_match_all('/:(.*?)(?=)/',$str,$matches);
我自己解决了
正则表达式中第一个括号里面的问号是设置“非贪婪模式”,第二个括号是正向环视,其本身不“占”字符。
Thank you anyway!!!

相似回答