php - 如何正则表达式匹配一串数字和连字符,但不以连字符开头或结尾?

标签 php regex string pcre assertions

我有一些代码验证 1 到 32 个字符的字符串,该字符串可能仅包含字母数字和连字符 ('-'),但可能不以连字符开头或结尾。

我正在使用 PCRE 正则表达式和 PHP(尽管 PHP 部分在本例中并不重要)。

现在伪代码如下所示:

if (match("/^[\p{L}0-9][\p{L}0-9-]{0,31}$/u", string) 
    and
    not match("/-$/", string))

   print "success!"

也就是说,我首先检查字符串的内容是否正确,是否带有“-”并且长度是否正确,然后我运行另一个测试以查看它是否正确以“-”结尾。

关于将其合并到单个 PCRE 正则表达式中,有什么建议吗?

我尝试过使用前瞻/后视断言,但无法让它发挥作用。

最佳答案

尝试这个正则表达式:

/^[\p{L}0-9](?:[\p{L}0-9-]{0,30}[\p{L}0-9])?$/u

如果您想使用环视断言:

/^[\p{L}0-9][\p{L}0-9-]{0,31}$(?<!-)/u

关于php - 如何正则表达式匹配一串数字和连字符,但不以连字符开头或结尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2700519/

相关文章:

php - 为什么 PHP 中的 rawurlencode() 会向 & 符号添加额外的转义字符?

php - PHPDoc 中的闭包语法

php - 重新排列 PHP 数组并返回 3 个最低值

regex - 我需要一些帮助来缩短这个正则表达式

java - 现有字符串加倍

php - 从字符串中删除特定的子字符串

python - 将python sql列表转换为字典

php - PHP构建多维json数组

java - 我想通过Java模式表达式提取css图像路径

python - 需要 python 正则表达式来处理子字符串