我正在对以下HTML代码执行preg_match():
HTML代码:
<div class="phone">
(123) 123-1234
</div>
正则表达式:
/<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
,无论有多少?
答案 0 :(得分:4)
不确定这是否是你想要的,但是trim()
会处理字符串每一边的空格,制表符和换行符(但不在字符串中)。
http://php.net/manual/en/function.trim.php
字符串修剪(字符串$ str [,字符串$ charlist])
此函数返回一个字符串 空白从一开始就被剥夺了 和结束没有第二个 参数,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
这样的东西,但它可能就是你所追求的(在正则表达式之外)。
答案 1 :(得分:3)
最简单的方法是使用\s*
填充正则表达式的“内容”部分,如下所示:
/<div class="phone">\s*(?<phone>.*?)\s*<\/div>/s
第一个\s*
消耗尽可能多的空白字符,当它看到电话号码中的第一个字符时停止。然后.*?
开始不情愿地消耗字符,停在正则表达式的下一部分(\s*<\/div>
)可以匹配的第一个位置,这就在电话号码的最后一个字符之后。
请注意,第一个\s*
必须贪婪且命名组中的.*?
必须非贪婪才能使其正常工作。因此,如果您开始感觉到使用/U
选项使所有量词变得非贪婪的冲动,请抵制它。我之所以提到这一点,是因为有些人会使用它们所有的正则表达式,我认为这是一种糟糕的做法。此外,/s
(单行)修饰符是必需的,但/m
(多行)修饰符不是。
答案 2 :(得分:2)
使用\s*
\s
是一个空白字符,*
表示任意数量的包含0
但我认为你应该寻找一个HTML解析器,它可能是更好的解决方案。