将正则一个字符的连续列表与正则表达式匹配

时间:2012-05-29 21:18:37

标签: ruby regex

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

给出这样的字符串:

+++>><<<--

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

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

([><\-\+]+)

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

如果它有所不同,那就是Ruby(1.9.3)。

1 个答案:

答案 0 :(得分:3)

不确定ruby位,但您可以使用模式中的反向引用来执行此操作:

(.)\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"

Ruby示例

# Return an array of matched patterns.
string = '+++>><<<--'
string.scan( /((.)\2+)/ ).collect { |match| match.first }