这就是我想要做的事情,
$line = "dsfsdf";
if (!preg_match('/^(?=.{1,30}$)[a-zA-Z0-9\-\_]*$^/', $line))
{
echo 'No Match found';
}
else
{
echo 'Match found';
}
要求如下,
我对正则表达式部分不太了解。有人可以通过简单的解释指导我如何实现它吗?
答案 0 :(得分:2)
您必须在结尾删除^
(字符串锚的开头)。此外,您可以将[a-zA-Z0-9_]
替换为\w
,因为没有任何修饰符,它们是相等的。
(?=.{1,30}$)
前瞻使得正则表达式引擎仅匹配1到30个字符的字符串。您可以删除前瞻,然后将限制量词应用于您的角色类。
您可以使用
'/^[\w-]{1,30}$/'
如果您更喜欢使用
'/^[a-zA-Z0-9_-]{1,30}$/'
请参阅PHP demo。
两者都意味着:
^
- 字符串开头[\w-]{1,30}
- 1至30个字母/数字/下划线/ -
符号$
- 字符串结尾。 注意要匹配字符串的最后一部分,您需要使用D
修饰符,或将$
替换为\z
锚点(即使用{{ 1}}或'/^[\w-]{1,30}$/D'
然后)。