我认为我甚至不会尝试解释这一点,我不知道这些话,但我想实现以下目标:
给出这样的字符串:
+++>><<<--
我想要一个匹配给我:+++
,但如果任何其他字符连续出现在字符串中,也会匹配。因此,如果+++
不存在,我想匹配>>
。
我尝试使用以下正则表达式:
([><\-\+]+)
但是,给定上面的字符串,它将匹配整个字符串,而不是第一个连续字符列表。
如果它有所不同,那就是Ruby(1.9.3)。
答案 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 }