0

JavaScriptで正規表現を実装します。

これを説明する最良の方法は例を使うことだと思います。検索文字列が

'abc'

干し草の山は

'auaisdgbbhbcsccddciubbffs'

パターンをヒットする必要があります:

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

そして、これらの文字の位置を返します。

正規表現でそのようなことをすることさえできますか?

4

3 に答える 3

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 に答える
1

使用しているプログラミング言語がわからないため、現時点で明確な回答を提供することは不可能です。

とは言うものの、私はこの種の一致を可能にする正規表現構造を知りません。

私が正しく理解していれば、たとえば、6文字後に「b」が続く「a」を見つけたいと思うでしょう。次に、「b」は「a」の6文字後に出現したため、「b」の6文字後に「c」を検索する必要があります。基本的に、後方参照が必要ですが、実際のテキストではなく、後方参照の長さのみを一致させる必要があります。これは正規表現では不可能だと思います。

いくつかの正規表現の実装には、これを可能にする珍しい構造が含まれている可能性があるため、プラットフォームを知っていると役立ちます。

アップデート

Javascriptには、最も強力でない正規表現の実装の1つがあります。純粋な正規表現でこれを実行できるとは思いません。追加のコードを作成する必要があります(簡単な例としては、正直に言って「コードのみ」のアプローチをお勧めします)。

于 2013-01-23T16:56:05.467 に答える
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 に答える