如何在 PHP 中使用正则表达式匹配空格、回车和换行?

Posted

技术标签:

【中文标题】如何在 PHP 中使用正则表达式匹配空格、回车和换行?【英文标题】:How to match whitespace, carriage return and line feed using regular expression in PHP? 【发布时间】:2011-11-23 13:57:52 【问题描述】:

我正在使用 php 中的正则表达式。我有以下字符串:

<img 
src="/files/admin/hotel_website.gif"  align="absmiddle" border="0" class="hotel_icon" />

此字符串包含回车和换行字符。

我希望我的正则表达式用 IMG 替换 html img 标签,但这不适用于上述文本。

我发现它包含这些字符,方法是遍历字符串中的每个字符并打印出可以在此处找到的十六进制表示 (http://pastebin.com/ViNdBsRV)。

这是我的正则表达式:

strip_tags(preg_replace('/^\s*<img\s*.*\/?>\s*$/i', '[IMG]', $test));

感谢您的帮助。

【问题讨论】:

你能告诉我你期望从起始字符串开始的字符串吗? 【参考方案1】:

[\n\r]+ 将匹配新行。对于空格添加[\n\r\s]+

【讨论】:

我将此添加到我的正则表达式中,但它不起作用; '/^\s*\s*$/i' 不要忘记您必须使用带引号的解释字符串才能生效! ' 只会产生文字。 如果我只想要 CRLF 空间应该是什么表达式? @SankalpKotewar 我觉得你也需要同样的东西。我没有测试它,但是\n 代表LF\r 代表CR(至少我希望我没有错。)。您是否仅使用 [\n\r] 尝试过?【参考方案2】:

这个:

preg_replace("#<img.+?/>#is", '[IMG]', $test)

就我个人而言,当我制作正则表达式时,我总是尽量做到最短/最简单。 在这里,您要替换以“&lt;img”开头并以“/&gt;”结尾的整个标签,“.+?”是一个非贪婪(惰性)捕获。 对于 case 的修饰符 'i' 和 's' 到 . 的可能性是一个新的行。

更多关于贪婪与懒惰:http://www.regular-expressions.info/repeat.html 更多关于修饰符:http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php

【讨论】:

这按预期工作,感谢您的全面解释。我也稍微调整了一下以适应其他情况: /\s*$/is @Sid 你不需要添加\s$ 我的解决方案已经可以在整个页面上替换&lt;img /&gt;(这是我测试正则表达式的方式)。 我添加了 $ 因为我正在从数据库表中获取 html 字符串。【参考方案3】:

这对我有用,它匹配多个空格和多行,以及任何其他字符或符号。

[\S+\n\r\s]+

希望这对任何人都有帮助。

例如匹配:

stpd  : asdfasdf
this is also matching ***

【讨论】:

+ 放入[] 使其匹配文字加号。 \S\s 相反,所以你基本上匹配任何字符。 [\s\S]+ 是解决方案,因为.通常 匹配换行符。这场比赛本身并没有多大用处。

以上是关于如何在 PHP 中使用正则表达式匹配空格、回车和换行?的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE 用正则表达式匹配 回车换行

PHP正则表达式考察点

js用正则把换行br替换为段落p

php正则表达怎么把一个字符串中的所有空格都转化为下划线

正则表达式中的应用

正则表达式匹配文本中包含换行符等空白字符如何匹配