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


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

>如果我有一个字符串:

$string="5 < 3 is @true"

我想摆脱@(或任何非字母或数字字符),除了<和>。

感谢您的阅读

正则表达式

使用以下命令并替换为空字符串:

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

工作原理:

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

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

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

使用:

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