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