以该字符开头和结尾的字符串不应该匹配。
最简单的做法是:
$string = '!test';
preg_match('/^(!?)([a-z0-9]{1,10})(!?)$/i', $string, $matches);
并检查$ matches?
答案 0 :(得分:3)
如果你在开头或结尾只有一个角色,就像说这个一样简单:
/^!|!$/
无需捕获组。
更新:要确保您获得感叹号和十个字母或十个字母和一个感叹号,请构建您的模式这样:
/^!?[a-z0-9]{1,10}$|^[a-z0-9]{1,10}!?$/
看起来它正在重演,但它实际上比拥有三个捕获组更便宜,更快。