php - 如果点和破折号最多出现两次,则进行正则表达式匹配

标签 php regex

我需要一个正则表达式来匹配最多包含 2 个破折号和 2 个点的任何字符串。 不必是破折号或点,但如果有 3 个以上的破折号 3 个点,甚至 3 个以上的破折号和 3 个以上的点,则正则表达式不能匹配字符串。

旨在用于 PHP。
我知道使用 PHP 函数的简单替代方案,但它用于仅允许使用正则表达式进行过滤的大型系统。

将匹配的示例字符串:
你好-world.com

不会匹配的示例字符串:
www.hello-world.easy.com hello-world-i-win.com

最佳答案

这符合您的期望吗?

(?!^.*?([.-]).*\1.*\1.*$)^.*$

查看here on Regexr

(?!^.*?([.-]).*\1.*\1.*$) 是一个否定前瞻。它匹配第一个 .- 将它放在捕获组 1 中,然后使用 hte backreference \1 检查是否还有两个。一旦找到三个,表达式将不再匹配。

^.*$ 匹配从开始到结束的所有内容,如果否定前瞻没有匹配的话。

关于php - 如果点和破折号最多出现两次,则进行正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6547187/

相关文章:

php - 从 PHP HTML 表提交表单

javascript - 如何在不重新加载页面的情况下更改 URL? - 有一点扭转

php - 我从 MySQL 数据库中提取数据时出现奇怪的字符

java - 用于匹配交替序列的正则表达式

php - .htaccess 多变量重写

php - 使用 PHP 将 JSON 数组发送到 Android Volley

php - 保护 PayPal 捐赠表格免受 XSS - CodeIgniter

r - 修改正则表达式匹配的子字符串并将其放回

c# - 有没有更好的方法来替换 C# 中的非 ascii 字符

c# - 正则表达式的字符类和否定