我刚刚开始学习 PHP 和 HTML 编码,并查看了一些有关正则表达式的教程,但很难理解这些含义。我很感激任何帮助。
例如,我想验证电子邮件地址[电子邮件受保护] /cdn-cgi/l/email-protection。我从代码开始,收到消息无效的电子邮件地址。
- 我究竟做错了什么?
- 我知道诸如 ^ 之类的元字符表示字符串的开头,$ 表示字符串的结尾,但这是什么意思?什么是字符串的开头,什么是字符串的结尾?
- 什么时候对正则表达式进行分组?
$emailaddress = '[email protected] /cdn-cgi/l/email-protection';
if(preg_match('/^[a-zA-z0-9]+@[a-zA-z0-9]+\.[a-zA-z0-9]$/', $emailaddress)) {
echo 'Great, you have a valid email address';
} else {
echo 'boo hoo, you have an invalid email address';
}
如果您想使用的话,您所编写的内容可以进行一些小的修改,但是您会错过最后的“+”。
1)
^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$
-
插入符号和美元字符匹配位置而不是字符,^ 等于行的开头,$ 等于行的结尾,它们用于锚定您的正则表达式。如果您编写的正则表达式没有这两个,您将匹配文本中所有位置的电子邮件地址,而不仅仅是本例中单行的电子邮件地址。如果您只写了^(插入符号),您将找到行首的每个电子邮件地址,如果您只写$(美元),您将只能找到行尾的电子邮件地址。
等等等等等等[电子邮件受保护] /cdn-cgi/l/email-protection巴拉巴拉
不会给你一个匹配,因为你在行的开头没有电子邮件地址,并且该行也不会以其结尾,因此为了在这种情况下匹配它,你必须删除 ^ 和 $。
- 据我所知,使用分组有两个原因:反向引用和...分组。使用分组的原因与数学中相同,1 + 3 * 4 与 (1 + 3) * 4 不同。您可以使用括号来限制量词,例如“+”、“*”和“?”以及交替“|” ETC。
您还可以使用括号进行反向引用,但由于我无法更好地解释它,因此我会将您链接到:http://www.regular-expressions.info/brackets.html http://www.regular-expressions.info/brackets.html
我鼓励您看一下这本书,即使您只阅读了前 2-3 章,您也会学到很多东西,这是一本很棒的书!http://oreilly.com/catalog/9781565922570 http://oreilly.com/catalog/9781565922570
正如评论员所说,这个正则表达式并不完美,但它可以工作并告诉你你忘记了什么。你就在不远的地方!
按要求更新:
“+”、“*”和“?”是量词。这也是一个很好的分组例子。
- '+' 表示匹配其前面的任何字符或组 1 或 n 次。
- '*' 表示匹配其前面的任意字符 0 次或 n 次。
- '?'表示匹配其前面的任何字符或组 0 次或 1 次。
n次的意思(无限期)
使用 [a-zA-Z0-9]+ 的原因是没有“+”,它只会匹配一个字符。使用 + 可以匹配多个,但必须至少匹配一个。使用 * 可以匹配多个,但也可以匹配 0 个,而 ?最多匹配 1 个字符,但也可以匹配 0 个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)