我将在 JavaScript 中实现 RegExp。
我认为解释这一点的最好方法是举个例子。如果搜索字符串是
'abc'
干草堆是
'auaisdgbbhbcsccddciubbffs'
模式需要达到:
'[a]uaisdg[b]bhbcsc[c]ddciubbffs' and
'au[a]isdgb[b]hbcsc[c]ddciubbffs'
并返回这些字符的位置......
甚至可以让正则表达式做这样的事情吗?
我将在 JavaScript 中实现 RegExp。
我认为解释这一点的最好方法是举个例子。如果搜索字符串是
'abc'
干草堆是
'auaisdgbbhbcsccddciubbffs'
模式需要达到:
'[a]uaisdg[b]bhbcsc[c]ddciubbffs' and
'au[a]isdgb[b]hbcsc[c]ddciubbffs'
并返回这些字符的位置......
甚至可以让正则表达式做这样的事情吗?
鉴于我们不知道您使用的编程语言,目前无法提供明确的答案。
也就是说,我不知道任何允许这种匹配的正则表达式构造。
如果我理解正确,您想找到一个“a”,例如,后面跟着一个“b”六个字符。然后,因为 'b' 在 'a' 之后出现了六个字符,所以你想在 'b' 之后找到一个 'c' 六个字符。本质上,您需要反向引用,但您只想匹配反向引用的长度而不是实际文本。我认为这对于正则表达式是不可能的。
那里的某些正则表达式实现可能有一个不常见的结构允许这样做,因此了解您的平台会有所帮助。
更新
Javascript 拥有最不强大的正则表达式实现之一。我认为您无法使用纯正则表达式来做到这一点。您需要编写一些额外的代码(老实说,我会为您的简单示例推荐一种“仅代码”方法)。
如果我正确理解您的问题,这样的正则表达式可能会起作用:
"(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
在 perl 中,您可以使用 $+[1] 等返回匹配的位置。
例如
$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