RegEx表示双重条件:最大长度和包含时间子序列br

时间:2016-09-11 21:05:29

标签: php regex

我需要选择一部分字符串,并使用正则表达式检查这两个条件:

  1. 最大长度可以说是15
  2. 具有给定子序列的最大数量,例如在我的情况下“br”2次
  3. 我可以用if条件做到这一点,但我希望找到一个正则表达式。 例如:

    • 1234567br89 => 1234567br89
    • 12br34br56br7 => 12br34br56
    • 1234567br8901234567 => 1234567br890123

    我需要这个来实现php函数限制长注释的显示,例如最多15个字符和3行左右。使用preg_match()。

1 个答案:

答案 0 :(得分:1)

正则表达式:

<machineKey 
  decryption="Auto" 
  validation="SHA1" 
  validationKey="9815F5A1AA9DB2F6A370548D58304A21F0792D63A08A1B34BD498059F65DA1484A783187CF798B40BED1E519BA40DBE9E135E952D319D2F8AA55D852CD77EE73"
  decryptionKey="DFD8FF5374C89B18746D58DE864224C4A941622431550A3E"
  compatibilityMode="Framework45"/>

它在前瞻构造(?=^.{0,15}(.*$))(?|((?:(?:(?!\1$|br).)*br(?:(?!\1$|br).)*){1,2})|(.{0,15})(?=\1$)) 中捕获前15个字符(如果总共有较少的字符,则为更少),然后检查最近捕获后是否最多出现{1}}个,一次或两次出现(?=...)字符。

如果前15个字符中没有br,则查看替换的另一侧br,如果放置一个或两个(.{0,15})(?=\1$),则交替的第一侧成功{ {1}}

第二个捕获组包含所需的输入字符串块。

Live demo