0

我想我什至不会尝试解释这一点,我不知道的话,但我想实现以下目标:

给定这样的字符串:

+++>><<<--

我想要一个匹配给我:+++,但如果任何其他字符像它们一样连续在字符串中,也匹配。因此,如果+++不存在,我想匹配>>

我尝试使用以下正则表达式:

([><\-\+]+)

但是,给定上面的字符串,它将匹配整个字符串,而不是第一个连续字符列表。

如果它有所作为,这是在 Ruby (1.9.3) 中。

4

1 回答 1

3

不确定红宝石位,但您可以使用模式中的反向引用来做到这一点:

(.)\1+

这样做是使用捕获组()来捕获任何字符.,然后是任意数量+的相同字符\1。这\1是对第一个捕获的组的反向引用;在具有更多捕获组的模式中,\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 回答