我的应用程序中有字符串。每个传入的字符串由子字符串组成,子字符串之间没有空格。例如," ID1ID1ID1ID2ID2ID2",其中" ID1"是子串和" ID2"是一个子串。我想要一个正则表达式,它可以检测何时有一个模式,其中一个子串包围一组不包含第一个子串的子串。因此,例如" ID1ID2ID1"," ID1ID1ID3ID1"和" ID1ID2ID3ID2ID1"一切都会匹配。连同传入的字符串,我在该字符串中有第一个子字符串(即ID1)。因此,使用第一个子字符串,我想说"匹配任意数量的ID1,然后(任何不是ID1的字符串),然后是任意数量的ID1"。
举个例子,到目前为止我尝试的是:
.*ID1.*[^ID1]+ID1.*
我刚用regexpal来测试它,它似乎工作正常。有没有更好的方法来做到这一点?我正在研究使用外观,但我无法看到使用它们的方法,因为环顾不会消耗字符串的任何部分。此外,我使用[^ ID1]这一事实似乎并不正确,因为它只是检查是否未使用字符I,D和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