无法使用\s/\S时,如何用正则匹配多行标签间内容?
解决正则匹配
标签内容的POSIX字符类替换问题
你的问题出在字符类的写法上,原来的[\s|\S]是用\s(空白字符)和\S(非空白字符)覆盖所有字符,但换成POSIX字符类时,你错误地用了嵌套字符类加|的写法[[^[:space:]]|[[:space:]]],这在正则里是无效语法。
正确的正则写法
把空白字符类和非空白字符类合并到同一个字符类中即可,两者的并集就是所有字符(包括换行):
(<p>[[:space:][^[:space:]]]+</p>)
补充说明
- POSIX字符类中,
[[:space:]]对应\s,[^[:space:]]对应\S,将它们放在同一个[]里就等价于[\s\S],能匹配任意字符。 - 若你需要避免贪婪匹配(比如存在多个
<p>标签时),可以把+改成+?(需你的正则引擎支持非贪婪量词),但你的示例场景下贪婪匹配就足够满足需求。
用这个正则测试你的示例文本,会准确匹配从<p>到</p>之间的所有内容,包括换行和缩进空格。
内容的提问来源于stack exchange,提问作者Steve Murdock
相关产品推荐
相关产品推荐

