0

我将在 JavaScript 中实现 RegExp。

我认为解释这一点的最好方法是举个例子。如果搜索字符串是

'abc'

干草堆是

'auaisdgbbhbcsccddciubbffs'

模式需要达到:

'[a]uaisdg[b]bhbcsc[c]ddciubbffs' and
'au[a]isdgb[b]hbcsc[c]ddciubbffs'

并返回这些字符的位置......

甚至可以让正则表达式做这样的事情吗?

4

3 回答 3

1

鉴于我们不知道您使用的编程语言,目前无法提供明确的答案。

也就是说,我不知道任何允许这种匹配的正则表达式构造。

如果我理解正确,您想找到一个“a”,例如,后面跟着一个“b”六个字符。然后,因为 'b' 在 'a' 之后出现了六个字符,所以你想在 'b' 之后找到一个 'c' 六个字符。本质上,您需要反向引用,但您只想匹配反向引用的长度而不是实际文本。我认为这对于正则表达式是不可能的。

那里的某些正则表达式实现可能有一个不常见的结构允许这样做,因此了解您的平台会有所帮助。

更新

Javascript 拥有最不强大的正则表达式实现之一。我认为您无法使用纯正则表达式来做到这一点。您需要编写一些额外的代码(老实说,我会为您的简单示例推荐一种“仅代码”方法)。

于 2013-01-23T16:56:05.467 回答
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
于 2013-01-23T16:44:51.080 回答
0

在 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
于 2013-01-23T16:51:00.353 回答