我有一些代码验证1到32个字符的字符串,它可能只包含字母数字和连字符(' - '),但不能以连字符开头或结尾。如何正则表达式匹配一串alnums和连字符,但不以连字符开头或结尾?
我使用PCRE正则表达式& PHP(尽管PHP部分在这种情况下并不重要)。
眼下的伪代码如下所示:
if (match("/^[\p{L}0-9][\p{L}0-9-]{0,31}$/u", string)
and
not match("/-$/", string))
print "success!"
也就是说,我首先检查该字符串是正确的内容,不与被“ - ”,是的正确的长度,然后我正在运行另一个测试,看看它不以' - '结尾。
有关将此合并到单个PCRE正则表达式的建议吗?
我试过使用预见/后视断言,但无法让它工作。
第一个建议很好,似乎通过了我所有的测试,谢谢! 顺便说一句,你知道是否有任何理由相对于另一方偏好吗? – shevron 2010-04-23 18:19:54
@Shahar Evron:有正则表达式实现,根本不支持隐藏断言或环视断言。在那种情况下,知道替代方案是很好的。 – Gumbo 2010-04-24 00:17:22