我正在对以下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解析器,这里可能是更好的解决方案。