如何使用 Ruby 将任何模式匹配到任何字符串?
How to match any pattern to a any string using Ruby?
我想在 Ruby 中创建一个接受以下参数的函数:
- 一个模式字符串(例如“abab”、“aabb”、“aaaa”等)
- 一个输入字符串(例如“dogcatdogcat”、“carcarhousehouse”等)
如果字符串与模式匹配,函数的 return 应该是 "true",如果是 "false"没有。
我第一步的做法:
使用正则表达式将输入字符串分隔成单词数组(例如 ["dog", "cat", "dog", "cat"])。
我的正则表达式专业知识不够好,无法为这个问题找到正确的正则表达式。
有谁知道如何执行适当的正则表达式,以便假设输入字符串始终是某种形式的模式来分隔重复出现的单词?
您可以使用捕获组和反向引用来多次匹配相同的子字符串,例如:
abab = /\A(.+)(.+)\z/
aabb = /\A(.+)(.+)\z/
aaaa = /\A(.+)\z/
'dogcatdogcat'.match?(abab) #=> true
'dogcatdogcat'.match?(aabb) #=> false
'dogcatdogcat'.match?(aaaa) #=> false
'carcarhousehouse'.match?(abab) #=> false
'carcarhousehouse'.match?(aabb) #=> true
'carcarhousehouse'.match?(aaaa) #=> false
在上面的模式中,(.+)
定义了一个匹配一个或多个字符的捕获组。 </code> 然后引用第一个捕获组并匹配相同的子字符串。 (<code>
为第2组以此类推)
\A
和 \z
是匹配字符串开头和结尾的锚点。
我想在 Ruby 中创建一个接受以下参数的函数:
- 一个模式字符串(例如“abab”、“aabb”、“aaaa”等)
- 一个输入字符串(例如“dogcatdogcat”、“carcarhousehouse”等)
如果字符串与模式匹配,函数的 return 应该是 "true",如果是 "false"没有。
我第一步的做法:
使用正则表达式将输入字符串分隔成单词数组(例如 ["dog", "cat", "dog", "cat"])。
我的正则表达式专业知识不够好,无法为这个问题找到正确的正则表达式。
有谁知道如何执行适当的正则表达式,以便假设输入字符串始终是某种形式的模式来分隔重复出现的单词?
您可以使用捕获组和反向引用来多次匹配相同的子字符串,例如:
abab = /\A(.+)(.+)\z/
aabb = /\A(.+)(.+)\z/
aaaa = /\A(.+)\z/
'dogcatdogcat'.match?(abab) #=> true
'dogcatdogcat'.match?(aabb) #=> false
'dogcatdogcat'.match?(aaaa) #=> false
'carcarhousehouse'.match?(abab) #=> false
'carcarhousehouse'.match?(aabb) #=> true
'carcarhousehouse'.match?(aaaa) #=> false
在上面的模式中,(.+)
定义了一个匹配一个或多个字符的捕获组。 </code> 然后引用第一个捕获组并匹配相同的子字符串。 (<code>
为第2组以此类推)
\A
和 \z
是匹配字符串开头和结尾的锚点。