删除Regex之后的换行符和制表符


Removing newlines and tabs after Regex

我正在对以下HTML代码执行preg_match():

HTML代码:

<div class="phone"> 
        (123) 123-1234
    </div> 

Regex模式:

/<div class="phone">(?<phone>.*?)<'/div>/s

结果:

[phone] => '
                    (617) 547-6670
      '

多余的线条和空间是我想要摆脱的。使用/sm选项不会影响结果。使用str_replace("'n",'',$string)去掉了一行,前面的空格应该是't制表符。我用str_replace("'n't't't't",'',$string)去掉了烦人的东西,但我需要一个更通用的解决方案。

无论有多少'n't,我如何删除它们

不确定这是否是您想要的,但trim()会处理字符串两侧的空格、制表符和换行符(但不在字符串内)。

http://php.net/manual/en/function.trim.php

字符串修剪(string$str[,string@charlist])

此函数返回一个字符串从一开始就去掉空白和str的末尾。没有第二个参数,trim()将删除这些字符:

" " (ASCII 32 (0x20)), an ordinary space.
"'t" (ASCII 9 (0x09)), a tab.
"'n" (ASCII 10 (0x0A)), a new line (line feed).
"'r" (ASCII 13 (0x0D)), a carriage return.
"'0" (ASCII 0 (0x00)), the NUL-byte.
"'x0B" (ASCII 11 (0x0B)), a vertical tab.

我确实意识到这不会处理像Hello<space><space><space>World这样的东西,但它可能是您想要的(regex之外)。

最简单的方法是用's*填充正则表达式的"内容"部分,如下所示:

/<div class="phone">'s*(?<phone>.*?)'s*<'/div>/s

第一个's*会消耗尽可能多的空白字符,当它看到电话号码中的第一个字符时就会停止。然后,.*?开始不情愿地使用字符,停在正则表达式的下一部分('s*<'/div>)可以匹配的第一个位置,也就是电话号码中最后一个字符之后。

请注意,第一个's*必须是贪婪的,命名组中的.*?必须是非贪婪的,这样才能工作。所以,如果你开始有冲动用/U选项让所有量词都不贪婪,那就抵制它。我提到这一点是因为有些人在所有正则表达式中都使用它,我认为这是一种糟糕的做法。此外,/s(单行)修饰符是必需的,但/m(多行)修饰符不是必需的。

使用's*

's是空白字符,*表示包括0 在内的任意数

但我认为你应该寻找一个html解析器,这里可能是更好的解决方案。