包含特殊字符的任何英文ASCII字符的正则表达式

时间:2014-07-23 06:15:46

标签: php regex preg-match

我想在php中编写一个正则表达式,只匹配任何英文字符,空格,数字和所有特殊字符。

从这个问题 Regex any ascii character

我试过这个

preg_match("/[\x00-\x7F]+/", $str);

但它会发出警告

No ending delimiter '/' found 

所以,如何在php中编写这个正则表达式。

替代方案就像[a-z \ d \ s]一样,并且一个接一个地考虑所有特殊字符,但是没有办法做更简单的事情吗?

由于

2 个答案:

答案 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);