php - 创建将匹配字符串中的要求的正则表达式
问题描述
问题
我需要编写一个正则表达式来匹配结构为 {A/B} 的字符串中的以下要求。
要求/条件:
- A 和 B 只能是 [UGWRB] 之一。
- 未出现 U 或 G 的结构无效。
- 两个字符相等的结构是无效的。
- U 或 G 必须在组合中至少出现一次。
- 只要后面的每个实例在单独读取时仍然有效,该结构就可以无限重复或继续。(请参阅下面的有效匹配项)
有效匹配:
- {U/G}{U/G}{U/G}
- {W/G}{U/B}
- {U/G}{U/B}
- {U/G}
- {G/U}
- {U/B}
- ...
无效匹配:
- {U/U}{U/U}
- {U/U}{G/G}
- {U/G}{U/U}
- {U/G}{R/B}
- {G/G}
- {R/B}
- {写/读}
- {黑白}
- ...
我的尝试
这是我到目前为止所得到的,但在 UGWRB 的所有组合中,我只得到了 14 场比赛中的 8 场比赛。
{([UG])(?(1)|\w)\/(?(1)\w|[UG])}
解决方案
为了完成任务,您必须使用负面和正面的前瞻性:
^(?:{(?=[^{}]*[UG])([UGWRB])\/(?!\1)(?1)})+$
在此处查看现场演示
请注意,m
应设置标志。
正则表达式分解:
^
匹配输入字符串的开头(?:
非捕获组的开始{
{
从字面上匹配(?=
积极前瞻的开始[^{}]*[UG]
寻找[UG]组合
)
前瞻结束([UGWRB])
匹配并捕获字符类中的字母\/(?!\1)(?1)
匹配/
并查看下一个字符是否与最近捕获的字符不同}
}
从字面上匹配
)+
小组结束,至少重复一次$
匹配输入字符串的结尾
推荐阅读
- python - 比较两列,一列按浮点数,另一列按字符串以获取匹配值
- wordpress - 无法创建目录 wp-content/uploads/2018/10。其父目录是否可由服务器写入
- c++ - 执行复合 XDOTOOL shell 命令需要延迟才能成功执行
- jquery - Bootstrap Datepicker - 动态更改格式 - 设置月份名称获取月份值
- r - 如何平滑/平均分布不均匀的数据?
- android - 如何阅读 Crashlytics?
- angular - Angular 6 项目和 wamp 服务器无法从同一网络上的其他计算机访问该项目
- java - 以编程方式获取 MongoDB 驱动程序版本
- google-bigquery - 如何列出项目中的所有表格大小
- sql - SQL查询列出一个表中的所有空列