删除除字母,'<'和'>'之外的所有字符

时间:2015-01-06 01:21:38

标签: php regex

说我是否有字符串:

$string="5 < 3 is @true"

我想摆脱@(或任何非字母或数字字符)除了&lt;和&gt;。

感谢您阅读

3 个答案:

答案 0 :(得分:1)

<强> REGEX

使用以下内容并替换为空字符串:

[^0-9a-z<> ]+

并使用i修饰符使其适用于大写字母(不区分大小写匹配)

DEMO

<强>解释

[^0-9a-z<> ]+           any character except: '0' to '9', 'a' to'z', '<', '>', ' '
                        (1 or more times(matching the most amount possible))

<强> PHP

$re = "/[^0-9a-z<> ]+/i"; 
$str = "5 < 3 is @true"; 
$subst = ""; 

$result = preg_replace($re, $subst, $str);

答案 1 :(得分:1)

正确的正则表达式如下:

/[^a-z<>]/gi

要替换,请执行以下操作:

$string = preg_replace('/[^a-z<>]/gi', '', $string);

工作原理:

  • [^]引爆否定字符类(匹配 isn&#39; t 在组中的所有内容)
  • a-z匹配az
  • 中的字符
  • <>与文字字符匹配(它将匹配<>
  • /.../i表示匹配为 i nsensitive(使a-z匹配A-Z
  • /.../g表示匹配 g lobal

最后2个称为标志,用于更改行为。

多个引擎可能有其他标志(如PHP的标志e,它与PHP表达式匹配并有助于保持正确的语法),但标志gim几乎无处不在。
标记m表示.(句点或点字符)执行 m 最后一行匹配(这意味着新行也匹配)。 .位于字符类中时不需要这样做,因为在字符类中,它将匹配文字.字符。

答案 2 :(得分:0)

使用:

$string = preg_replace('/[^<>]/', '', $string);