我需要一个正则表达式来匹配<p>标签内的任何内容,例如,如果我有一些文本:
<p>Hello world</p>
Run Code Online (Sandbox Code Playgroud)
正则表达式将匹配Hello world部分
在javascript中:
var str = "<p>Hello world</p>";
str.search(/<\s*p[^>]*>([^<]*)<\s*\/\s*p\s*>/)
Run Code Online (Sandbox Code Playgroud)
在PHP中:
$str = "<p>Hello world</p>";
preg_match_all("/<\s*p[^>]*>([^<]*)<\s*\/\s*p\s*>/", $str);
Run Code Online (Sandbox Code Playgroud)
这些将匹配像这样复杂的东西
< p style= "font-weight: bold;" >Hello world < / p >
Run Code Online (Sandbox Code Playgroud)
小智 7
看来上述提出的解决方案要么会失败:
<p>...</p>每当标签内包含其他标签(如<a>、等)时返回标签内的文本<em>,或者<p>和<path>或<p class="content">考虑使用这个正则表达式:
<p(|\s+[^>]*)>(.*?)<\/p\s*>
生成的文本将在组 2 中捕获。
</p>显然,每当关闭标签由于某种原因包含在注释标签中时,此解决方案将无法正常工作<p> ... <!-- ... </p> ... -->
编辑:不要这样做.只是不要.
看到这个问题
如果你坚持,使用<p>(.+?)</p>,结果将在第一组.它并不完美,但HTML解析问题的regexp解决方案永远都不会.
例如(在python中)
>>> import re
>>> r = re.compile('<p>(.+?)</p>')
>>> r.findall("<p>fo o</p><p>ba adr</p>")
['fo o', 'ba adr']
Run Code Online (Sandbox Code Playgroud)