正则表达式 - 如何检查字符串是否以给定字符开头或结尾?

Regexp - How to check whether a string starts OR ends with given character?

以该字符开头和结尾的字符串不应匹配。

是否最简单的做法是:

$string = '!test';
preg_match('/^(!?)([a-z0-9]{1,10})(!?)$/i', $string, $matches);

并检查 $matches?

如果开头或结尾只有一个字符,就这么简单:

/^!|!$/

不需要捕获组。


更新: 确保您得到 一个感叹号和十个字母十个字母和一个感叹号标记,像这样构建你的模式:

/^!?[a-z0-9]{1,10}$|^[a-z0-9]{1,10}!?$/

它看起来像是在重复自己,但实际上它比拥有三个捕获组更便宜、更快。

我整理了a unit test in regex101 for this.