我想在php中编写一个正则表达式,只匹配任何英文字符,空格,数字和所有特殊字符。
从这个问题 Regex any ascii character
我试过这个
preg_match("/[\x00-\x7F]+/", $str);
但它会发出警告
No ending delimiter '/' found
所以,如何在php中编写这个正则表达式。
替代方案就像[a-z \ d \ s]一样,并且一个接一个地考虑所有特殊字符,但是没有办法做更简单的事情吗?
由于
答案 0 :(得分:17)
有许多错综复杂的解决方案,但我建议使用这个非常简单的正则表达式:
^[ -~]+$
它允许ASCII table中的所有可打印字符。
在PHP中:
$regex = '%^[ -~]+$%';
if (preg_match($regex, $yourstring, $m)) {
$thematch = $m[0];
}
else { // no match...
}
<强>解释强>
^
锚点断言我们位于字符串的开头[ -~]
匹配空格和波浪号之间的所有字符(ASCII表中的所有可打印字符)+
量词表示“匹配其中一个或多个”$
锚点断言我们位于字符串的末尾答案 1 :(得分:3)
PHP的正则表达式附带a set of character classes您可以参考,ascii是其中之一
$test = "hello world 123 %#* 单 456";
preg_match_all("/[[:ascii:]]+/",$test,$matches);
print_r($matches);