如何使用正则表达式匹配此模式?

时间:2015-01-12 16:20:15

标签: regex string

我的应用程序中有字符串。每个传入的字符串由子字符串组成,子字符串之间没有空格。例如," ID1ID1ID1ID2ID2ID2",其中" ID1"是子串和" ID2"是一个子串。我想要一个正则表达式,它可以检测何时有一个模式,其中一个子串包围一组不包含第一个子串的子串。因此,例如" ID1ID2ID1"," ID1ID1ID3ID1"和" ID1ID2ID3ID2ID1"一切都会匹配。连同传入的字符串,我在该字符串中有第一个子字符串(即ID1)。因此,使用第一个子字符串,我想说"匹配任意数量的ID1,然后(任何不是ID1的字符串),然后是任意数量的ID1"。

举个例子,到目前为止我尝试的是:

.*ID1.*[^ID1]+ID1.*

我刚用regexpal来测试它,它似乎工作正常。有没有更好的方法来做到这一点?我正在研究使用外观,但我无法看到使用它们的方法,因为环顾不会消耗字符串的任何部分。此外,我使用[^ ID1]这一事实似乎并不正确,因为它只是检查是否未使用字符I,D和1。谢谢。

1 个答案:

答案 0 :(得分:1)

如果您知道ID1,则可以执行此操作

 # (?:ID1)+(?:(?!ID1|[ ]).)+(?:ID1)+

 (?:                           # Cluster group, leading 'ID1' 
      ID1                           # An 'ID1'
 )+                            # End cluster, do 1 to many times

 (?:                           # Cluster group
      (?!                           # Lookahead NEGAGIVE assertion
           ID1                           # 'ID1'
        |  [ ]                           # or space
      )                             # End lookahead
      .                             # Assertion passed, grab any character
 )+                            # End cluster, do 1 to many times

 (?:                           # Cluster group, trailing 'ID1'
      ID1                           # An 'ID1'
 )+                            # End cluster, do 1 to many times