我将在JavaScript中实现RegExp。
我认为解释这个问题的最好方法是举个例子。如果搜索字符串是
'abc'
和干草堆是
'auaisdgbbhbcsccddciubbffs'
模式需要点击:
'[a]uaisdg[b]bhbcsc[c]ddciubbffs' and
'au[a]isdgb[b]hbcsc[c]ddciubbffs'
并返回这些字符的位置......
Regex甚至可以做这样的事情吗?
答案 0 :(得分:1)
如果我理解你的问题,这样的正则表达式可能有用:
"(a).{6}(b).{6}(c).{6}.*"
您可能希望加入第1组,第2组和第3组。
由于您没有指定语言,请考虑使用上面给出的字符串的python中的以下示例:
>>> q = re.compile(r"(a).{6}(b).{6}(c)")
>>> s1 = 'auaisdgbbhbcsccddciubbffs'
>>> s2 = 'auaisdgbbhbcsccddciubbffs'
>>> res1 = q.findall(s1)
>>> res2 = q.findall(s2)
>>> print res1, res2
[('a', 'b', 'c')] [('a', 'b', 'c')]
>>> for r in res1:
print ''.join(r)
abc
>>> for r2 in res2:
print ''.join(r)
abc
答案 1 :(得分:1)
鉴于我们不知道您正在使用的编程语言,此时无法提供明确的答案。
那就是说,我不知道任何允许这种匹配的正则表达式构造。
如果我理解正确,你想找一个'a',例如,后面跟着'b'六个字符。然后,因为“b”在'a'之后出现了六个字符,你想在'b'之后找到'c'六个字符。基本上,您需要backreferences,但您只想匹配反向引用的长度而不是实际文本。我不认为正则表达式可以做到这一点。
有些正则表达式实现可能有一个不常见的结构允许这样做,所以知道你的平台会有所帮助。
<强>更新强>
Javascript有least powerful个正则表达式实现之一。我认为你不能用纯正则表达式做到这一点。您需要编写一些额外的代码(我诚实地为您的简单示例推荐“仅代码”方法)。
答案 2 :(得分:0)
在perl中,您可以使用$ + [1]等返回匹配位置
e.g。
$x=qqqafkewibslspcfjfjfj;
$x=~/(a).*(b).*(c)/;
print 'a was at: ' . $+[1] . ' b was at: ' . $+[2] . ' c was at:' . $+[3];"
告诉我:
a was at: 4 b was at: 10 c was at:15