【问题标题】:Regular expression to preserve line breaks保留换行符的正则表达式
【发布时间】:2013-02-21 09:34:51
【问题描述】:

我有一个正则表达式,它只允许消息中的某些字符。 我想要实现的是允许换行,这将使用 nl2br 函数来保留。

这就是我目前所拥有的:

preg_replace('/[^a-zA-Z0-9ńśćółęążź\ .,-]/','',$message)

据我检查,以下表达式应保留换行符,但将其添加到上述表达式时遇到问题:

/(\r|\n|\r\n){2,}/

【问题讨论】:

  • 我会打破字符串并检查每一行,而不是在正则表达式中包含换行符。

标签: php regex line-breaks


【解决方案1】:

您只想将\r\n 添加到不替换的字符列表中。所以:

preg_replace("/[^a-zA-Z0-9ńśćółęążź\ \.,\-\r\n]/",'',$message)

在上述表达式中,我还必须将 ' 更改为 "(以便识别 \r\n),但还必须转义 .- 字符

【讨论】:

  • 还需要添加全局标志:/[^a-zA-Z0-9ńśćółęążź\ \.,\-\n\r]/g
  • PHP 中没有 g 修饰符
  • 是的,你是对的)preg_replace() 默认会执行全局替换,而 g 不是 PCRE 中的有效修饰符(PHP 使用的正则表达式实现)跨度>
【解决方案2】:

我相信这就是你要找的。​​p>

  • 使用 preg_quote 避免忘记转义某些字符,例如“.”在你的表达中。我敢肯定大部分都坏了。
  • 使用不区分大小写的“i”修饰符,而不是 a-zA-Z
  • 正如罗斯所说,添加 \r 和 \n

打印 preg_replace('/' . preg_quote('[^a-z0-9ńśćółęążź\ .,-\r\n])') . '/i','',"test\r\ntest\rtest\ntest");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-05
    • 2022-10-13
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 2012-06-29
    • 1970-01-01
    相关资源
    最近更新 更多