2011-09-25 212 views
2

首先,如果标记不清楚,我在PHP中执行此操作 - 但这可能无关紧要。正则表达式 - 删除所有非字母数字字符CRLF问题

我有这样的代码:

$inputStr = strip_tags($inputStr); 
$inputStr = preg_replace("/[^a-zA-Z\s]/", " ", $inputStr); 

这似乎删除所有的HTML标签,几乎所有特殊和非字母字符完美。一个问题是,出于某种原因,它不会过滤出卡拉格返回/换行(只是组合)。

如果我加入这一行:

$inputStr = preg_replace("/\s+/", " ", $inputStr); 

末,然而,它的伟大工程。有人可以告诉我:

  1. 为什么第一个preg_replace过滤掉CR/LF?
  2. 这第二个preg_repalce实际上在做什么?我大部分都理解第一部分,但第二部分让我感到困惑 - 它有效,但我不知道为什么。
  3. 我可以将它们合并为一行吗?

回答

1

你的第一个正则表达式是删除所有不是字母或空格的字符。 CRLF是空白的,所以它们不会被过滤掉。

第二个是用空格字符替换空格。从本质上讲,它将空白序列压缩成一个空格(由于量词是贪婪的)。

我建议从第一个正则表达式中删除\s,看看是否有效。

+0

谢谢你。有一天我会有足够的时间阅读一个好的正则表达式教程和练习,哈哈。我认为它非常需要。我会试试看,稍后再告诉你。 –

+0

非常感谢,工作很棒;) –

2
  1. 您告诉它删除除字母和空白以外的所有内容。换行符是空格,所以它们不会被删除。您可以使用\h而不是\s来排除横向空格。
  2. 它只是意味着“用一个空格替换一个或多个空格字符(\s+)的每个序列。”
  3. preg_replace("/[^A-Za-z]+/", " ", ...)可能会做。
1
  1. \s与空白匹配如\n
  2. 它用空格替换所有空格字符。
  3. 你可以让它成为一个不可读的行,但可能不是一个正则表达式。
相关问题