首页 > 解决方案 > 创建将匹配字符串中的要求的正则表达式

问题描述

问题

我需要编写一个正则表达式来匹配结构为 {A/B} 的字符串中的以下要求。

要求/条件:

有效匹配:

无效匹配:

我的尝试

这是我到目前为止所得到的,但在 UGWRB 的所有组合中,我只得到了 14 场比赛中的 8 场比赛。

{([UG])(?(1)|\w)\/(?(1)\w|[UG])}

标签: phpregexexpression

解决方案


为了完成任务,您必须使用负面和正面的前瞻性:

^(?:{(?=[^{}]*[UG])([UGWRB])\/(?!\1)(?1)})+$

在此处查看现场演示

请注意,m应设置标志。

正则表达式分解:

  • ^匹配输入字符串的开头
  • (?:非捕获组的开始
    • {{从字面上匹配
    • (?=积极前瞻的开始
      • [^{}]*[UG]寻找[UG]组合
    • )前瞻结束
    • ([UGWRB])匹配并捕获字符类中的字母
    • \/(?!\1)(?1)匹配/并查看下一个字符是否与最近捕获的字符不同
    • }}从字面上匹配
  • )+小组结束,至少重复一次
  • $匹配输入字符串的结尾

推荐阅读