我想在php中写一个正则表达式,只匹配任何英文字符,空格,数字和所有特殊字符。
从这个问题正则表达式任意ascii字符
I tried this
preg_match("/['x00-'x7F]+/", $str);
但是会抛出一个警告
No ending delimiter '/' found
那么,如何在php中编写这个正则表达式呢?
另一种选择是像[a-z'd's]这样的SMTH,并逐个考虑所有特殊字符,但是没有更简单的方法吗?
谢谢
有许多复杂的解决方案,但我建议使用这个非常简单的正则表达式:
^[ -~]+$
允许在ASCII表中打印所有可打印字符。
在PHP:
$regex = '%^[ -~]+$%';
if (preg_match($regex, $yourstring, $m)) {
$thematch = $m[0];
}
else { // no match...
}
-
^
锚断言我们位于字符串 的开头。 - 字符类
[ -~]
匹配空格和波浪号之间的所有字符(ASCII表中所有可打印的字符) -
+
量词表示"匹配其中一个或多个" -
$
锚断言我们位于字符串 的末尾。
PHP的正则表达式有一组可以引用的字符类,ascii是其中之一
$test = "hello world 123 %#* 单 456";
preg_match_all("/[[:ascii:]]+/",$test,$matches);
print_r($matches);