JavaScriptで正規表現を実装します。
これを説明する最良の方法は例を使うことだと思います。検索文字列が
'abc'
干し草の山は
'auaisdgbbhbcsccddciubbffs'
パターンをヒットする必要があります:
'[a]uaisdg[b]bhbcsc[c]ddciubbffs' and
'au[a]isdgb[b]hbcsc[c]ddciubbffs'
そして、これらの文字の位置を返します。
正規表現でそのようなことをすることさえできますか?
JavaScriptで正規表現を実装します。
これを説明する最良の方法は例を使うことだと思います。検索文字列が
'abc'
干し草の山は
'auaisdgbbhbcsccddciubbffs'
パターンをヒットする必要があります:
'[a]uaisdg[b]bhbcsc[c]ddciubbffs' and
'au[a]isdgb[b]hbcsc[c]ddciubbffs'
そして、これらの文字の位置を返します。
正規表現でそのようなことをすることさえできますか?
あなたの質問を正しく理解していれば、次のような正規表現が機能する可能性があります。
"(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
使用しているプログラミング言語がわからないため、現時点で明確な回答を提供することは不可能です。
とは言うものの、私はこの種の一致を可能にする正規表現構造を知りません。
私が正しく理解していれば、たとえば、6文字後に「b」が続く「a」を見つけたいと思うでしょう。次に、「b」は「a」の6文字後に出現したため、「b」の6文字後に「c」を検索する必要があります。基本的に、後方参照が必要ですが、実際のテキストではなく、後方参照の長さのみを一致させる必要があります。これは正規表現では不可能だと思います。
いくつかの正規表現の実装には、これを可能にする珍しい構造が含まれている可能性があるため、プラットフォームを知っていると役立ちます。
アップデート
Javascriptには、最も強力でない正規表現の実装の1つがあります。純粋な正規表現でこれを実行できるとは思いません。追加のコードを作成する必要があります(簡単な例としては、正直に言って「コードのみ」のアプローチをお勧めします)。
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