Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Regexp忽略一些字母_Ruby_Regex_Regex Group - Fatal编程技术网

Ruby Regexp忽略一些字母

Ruby Regexp忽略一些字母,ruby,regex,regex-group,Ruby,Regex,Regex Group,我正在努力解决这个问题。我正试图根据输入数据生成正则表达式。目标是获取所有具有唯一字母的子字符串(包括重叠的子字符串) 我正试图像这样使用regexp: regexp = /(?=(?<gs>.)(?<gu>[^\k<gs>])(?<gb>[^\k<gs>\k<gu>])(?<gm>[^\k<gs>\k<gu>\k<gb>])(?<ga>[^\k<gs>

我正在努力解决这个问题。我正试图根据输入数据生成正则表达式。目标是获取所有具有唯一字母的子字符串(包括重叠的子字符串)

我正试图像这样使用regexp:

regexp = /(?=(?<gs>.)(?<gu>[^\k<gs>])(?<gb>[^\k<gs>\k<gu>])(?<gm>[^\k<gs>\k<gu>\k<gb>])(?<ga>[^\k<gs>\k<gu>\k<gb>\k<gm>])(?<gr>[^\k<gs>\k<gu>\k<gb>\k<gm>\k<ga>])(?<gi>[^\k<gs>\k<gu>\k<gb>\k<gm>\k<ga>\k<gr>])(?<gn>[^\k<gs>\k<gu>\k<gb>\k<gm>\k<ga>\k<gr>\k<gi>])(?<ge>[^\k<gs>\k<gu>\k<gb>\k<gm>\k<ga>\k<gr>\k<gi>\k<gn>]))/
"archipelago".scan(regexp) #=> []
"archipelbgo".scan(regexp) #=> []
"brchipelbgo".scan(regexp) #=> []
"zrchipelzgo".scan(regexp) #=> [["z", "r", "c", "h", "i", "p", "e", "l", "z"]] 
regexp=/(?=(?)(?[^\k])(?[^\k\k])(?[^\k\k\k])(?[^\k\k\k\k])(?[^\k\k\k\k\k])(?[^\k\k\k\k\k\k])(?[^\k\k\k\k\k\k])(?[^\k\k\k\k\k\k\k\k]))/
“群岛”。扫描(regexp)#=>[]
“archipelbgo”.scan(regexp)#=>[]
“brchipelbgo”.scan(regexp)#=>[]
“zrchipelzgo”.scan(regexp)=>[[“z”,“r”,“c”,“h”,“i”,“p”,“e”,“l”,“z”]]

为什么会这样?为什么它找不到带有
“b”
“a”
的东西?为什么它只返回一个带有
“z”
的结果(不正确)?我做错了什么?

我认为正则表达式不是解决这个问题的正确工具。然而,我们可以做到以下几点

def substrings(str)
  arr = str.chars
  (1..str.size).each_with_object([]) { |n,a|
    arr.each_cons(n) { |b| a << b.join if b == b.uniq } }
end

substrings("archipelago")
  #=> ["a", "r", "c", "h", "i", "p", "e", "l", "a", "g", "o", "ar", "rc", "ch", "hi",
  #    "ip", "pe", "el", "la", "ag", "go", "arc", "rch", "chi", "hip", "ipe", "pel",
  #    "ela", "lag", "ago", "arch", "rchi", "chip", "hipe", "ipel", "pela", "elag",
  #    "lago", "archi", "rchip", "chipe", "hipel", "ipela", "pelag", "elago", "archip",
  #    "rchipe", "chipel", "hipela", "ipelag", "pelago", "archipe", "rchipel", "chipela",
  #    "hipelag", "ipelago", "archipel", "rchipela", "chipelag", "hipelago", "rchipelag",
  #    "chipelago", "rchipelago"]
def子字符串(str)
arr=str.chars
(1..str.size)。每个_与_对象([]){n,a|
每一个{b{a[“a”、“r”、“c”、“h”、“i”、“p”、“e”、“l”、“a”、“g”、“o”、“ar”、“rc”、“ch”、“hi”,
#“ip”、“pe”、“el”、“la”、“ag”、“go”、“arc”、“rch”、“chi”、“hip”、“ipe”、“pel”,
#“ela”、“lag”、“ago”、“arch”、“rci”、“chip”、“hipe”、“ipel”、“pela”、“elag”,
#“lago”、“archi”、“rchip”、“chipe”、“hipel”、“ipela”、“pelag”、“elago”、“archip”,
#“希佩”、“奇佩尔”、“希佩拉”、“伊佩拉”、“佩拉戈”、“阿奇佩”、“希佩尔”、“奇佩拉”,
#“hipelag”、“ipelago”、“archipel”、“Archipela”、“chipelag”、“hipelago”、“Archipelag”,
#“chipelago”、“Archipelago”]

在否定字符类中,几乎所有特殊字符都会失去其特殊意义。
[^\k]
应写成
(?!\k)。
“具有所有唯一字母”--对于
regex
@WiktorStribiżew来说,这不是一份很好的工作。你能把你的评论移到答案上来吗?它奏效了。我从来没有收到过关于我答案的反馈。这就是你要找的吗?