0

私はこれを説明しようとさえ思わない、私は言葉を知りませんが、私は次のことを達成したいと思います:

次のような文字列を指定します。

+++>><<<--

私は一致を私に与えることを望みます: +++、しかし、他の文字のいずれかが文字列に連続して含まれている場合にも一致します。がなかったら、+++に合わせたいと思い>>ます。

次の正規表現を使用してみました。

([><\-\+]+)

ただし、上記の文字列を指定すると、連続する文字の最初のリストではなく、文字列全体と一致します。

違いがある場合、これは Ruby (1.9.3) にあります。

4

1 に答える 1

3

ルビビットについてはわかりませんが、パターン内の後方参照を使用してこれを行うことができます:

(.)\1+

これが行うことは、キャプチャ グループを使用して()任意の文字の.後に任意の数+の同じ文字をキャプチャすること\1です。は\1、最初にキャプチャされたグループへの後方参照です。より多くのキャプチャ グループを持つパターンでは\2、2 番目のキャプチャ グループなどになります。

Java の例

Pattern p = Pattern.compile("(.)\\1+");
Matcher m = p.matcher("aaabbccaa");
m.find();
System.out.println(m.group(0)); // prints "aaa"

ルビーの例

# Return an array of matched patterns.
string = '+++>><<<--'
string.scan( /((.)\2+)/ ).collect { |match| match.first }
于 2012-05-29T21:25:50.357 に答える