允许在正则表达式中使用其他特殊字符

时间:2015-01-12 00:50:27

标签: php regex

我想对以下网址进行验证。

$a = '/foo-bar-tar';
$b = '/foo-&-tar2';
$a = '/foo-bar-tar.';
$a = '/foo-bar.[tar]';
$a = '/foo-bar-tar';

总而言之,这些是我愿意接受的角色,没有特别的顺序:

/ - & [  ]  ( ) .

当然还有字母和数字:

a-z A-Z 0-9

问题在于我可以验证字母,数字和特殊字符,例如/.-,但我无法验证()[] - 我想因为这些是正则表达式语言的一部分。

这是我到目前为止的模式:

^(/[a-z-A-z-0-9.]+)$

它匹配字母,数字和.,但我不知道如何使其适用于()[]

1 个答案:

答案 0 :(得分:1)

尝试以下改编的模式:

^\/[a-zA-Z0-9\-&\[\]().]+$

Regular expression visualization

Debuggex Demo(对问题中所有样本输入字符串进行单元测试)

关键点:

  • ^ - 匹配输入字符串的开头
  • \/ - 您期望的开场/
  • [a-zA-Z0-9\-&\[\]().]+ - 一个或多个(+)字母数字(a-zA-Z0-9)或允许的特殊字符(\-&\[\]().)与-[]由于在该上下文中的特殊含义而在角色类中进行了转义
  • $ - 匹配输入字符串的结尾

此外,我没有保留分组表(即()),因为它们对^$约束的模式没有意义感兴趣的匹配(即整个输入字符串)。