RegEx - HTML字符串中的匹配空间?

时间:2015-07-21 07:37:31

标签: php regex

要从WYSIWYG编辑器清理用户输入,我正在尝试查找以下字符串

<p>&nbsp;</p>

<p> </p>

<p></p>

这是我正在使用的正则表达式

/\<p\>([nbsp\;]*|[\s]*|[ ]*)\<\/p\>/i

我对RegEx很陌生,但据我所知,这是:

  1. \<p\>: - 完全匹配<p>,然后
  2. ( - 匹配:
    • [nbsp\;]* - “nbsp;”确切地,任意次数
    • |[\s]* - 或任何空格字符,任意次数
    • |[ ]* - 或“”(空格),任意次数
  3. <\/p\> - 完全匹配</p>
  4. 但是,此表达式仅匹配 <p>nbsp;</p>,而不匹配其他两个。

    我也尝试过:

    /\<p\>[nbsp\;|\s| ]*\<\/p\>/i
    

    我正在使用RegEx101.com(first expressionsecond expression

    对其进行测试

    我怎样才能让它发挥作用?

4 个答案:

答案 0 :(得分:1)

您必须使用g修饰符进行多次匹配。

/\<p\>([nbsp\;|\s| ]*[\s]*|)\<\/p\>/gi

https://regex101.com/r/zR9jY4/2

答案 1 :(得分:1)

你不能使用&#34;整个单词&#34;在一个字符类中,以下就足够了......

~<p>(?:&nbsp;|\s)*</p>~i

注意:您不需要包含<space>\s令牌将与空白字符匹配,您不需要转义{{} 1}}和<,它们不被视为特殊字符。

答案 2 :(得分:1)

你忘了放大器; &安培;

>

在示例中

 /\<p\>[&nbsp\;|\s| ]*\<\/p\>/i

这将匹配前3

答案 3 :(得分:0)

您不必使用方括号。

/\<p\>(&nbsp;*|\s*)\<\/p\>/i