我试图尽可能长时间地将正则表达式与字符串匹配。这是要查看的字符串:
"xxaxxbxxbxbxxbxxbxxbxxdxx"
要匹配的模式是:
"bcda"
该模式应解释如下:
b
:字符串中有几个。第一个应该匹配。c
:字符串中没有一个,因此不会返回任何内容。 d
:字符串末尾附近只有一个。它应该被退回。a
:字符串的开头有一个。由于首先寻找b
,c
和d
并返回结果,因此不会返回a
。预期回报是:
"bd"
正则表达式匹配可能不是实现此目的的正确方法,但我想请求帮助。基本的问题是:我可以使用正则表达式来一般地找到一个子串,它尽可能多地表示一个有序但不一定是连续的候选字符序列吗?如果是这样,怎么样?
答案 0 :(得分:1)
正如@sawa解释的那样,你不能用一个正则表达式做到这一点。这是一个递归解决方案。
def consecutive_matches(str, pattern)
return '' if str.empty? || pattern.empty?
ch, pat = pattern[0], pattern[1..-1]
i = str.index(ch)
if i
ch + consecutive_matches(str[i+1..-1], pat)
else
consecutive_matches(str, pat)
end
end
str = "xxaxxbxxbxbxxbxxbxxbxxdxx"
consecutive_matches(str, "bcda") #=> "bd"
consecutive_matches(str, "abcd") #=> "abd"
consecutive_matches(str, "dabc") #=> "d"
consecutive_matches(str, "cfgh") #=> ""
答案 1 :(得分:-1)
单个正则表达式匹配是不可能的。正则表达式中的捕获必须是原始字符串的子字符串。 bd
此处不是,因此无法将其作为单个捕获进行匹配。