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

Remove all characters except letters, '<', and '>'

假设我有一个字符串:

$string="5 < 3 is @true"

我想删除除 < 和 > 之外的@(或任何非字母或数字字符)。

感谢阅读

使用:

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

正则表达式

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

[^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);

正确的正则表达式如下:

/[^a-z<>]/gi

要替换,请这样做:

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

工作原理:

  • [^] 引爆一个 negative 字符 class (匹配组中 不是 的所有内容)
  • a-z 匹配从 az
  • 的字符
  • <> 匹配文字字符(它将匹配 <>
  • /.../i 表示匹配大小写 i 不敏感(使 a-z 也匹配 A-Z
  • /.../g表示匹配是global

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

多个引擎可能有其他标志(例如 PHP 的标志 e,它匹配 PHP 表达式并有助于保持正确的语法),但标志 gim几乎无处不在。
标志 m 告诉 .(句点或点字符)执行 m 多行匹配(这意味着换行符也被匹配)。当 . 位于字符 class 内时不需要这样做,因为在字符 class 内,它将匹配文字 . 字符。