>如果我有一个字符串:
$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
匹配从a
到z
的字符 -
<>
匹配文字字符(它将匹配<
或>
) -
/.../i
表示匹配是大小写 i不敏感的(使a-z
匹配也A-Z
) -
/.../g
表示匹配项为 global
最后 2 个称为标志,用于更改行为。
多个引擎可能具有其他标志(例如 PHP 的标志e
,它与 PHP 表达式匹配并有助于保持正确的语法),但标志gim
几乎无处不在。
标志m
告诉.
(句点或点字符)执行 m最终匹配(这意味着换行符也匹配)。当.
位于字符类内时,不需要这样做,因为在字符类中,它将与文字.
字符匹配。
使用:
$string = preg_replace('/[^<>]/', '', $string);