Regex也会在字符串Ruby的开头捕获某些单词

Regex也会在字符串Ruby的开头捕获某些单词,ruby,regex,Ruby,Regex,正在寻找有关编写正则表达式的帮助,以捕获特定字符串是否以特定字符串开头,以及捕获起始字符串和剩余字符串。例如 假设字符串的可能开头为“P”、“RO”、“RPX”,示例字符串为“PIXR”或“ROXP”或“RPX”。 我想写一个正则表达式,如果它以给定的可能字符串开始,它将捕获字符串的开始和结尾部分,例如 'PIXRT'=~//输出'P'和'IXRT' 不太熟悉正则表达式,因此非常感谢您的帮助。您可以使用带有两个捕获组的正则表达式,一个在开始时捕获已知值,其余将捕获字符串的其余部分: rx = /

正在寻找有关编写正则表达式的帮助,以捕获特定字符串是否以特定字符串开头,以及捕获起始字符串和剩余字符串。例如 假设字符串的可能开头为“P”、“RO”、“RPX”,示例字符串为“PIXR”或“ROXP”或“RPX”。 我想写一个正则表达式,如果它以给定的可能字符串开始,它将捕获字符串的开始和结尾部分,例如 'PIXRT'=~//输出'P'和'IXRT'


不太熟悉正则表达式,因此非常感谢您的帮助。

您可以使用带有两个捕获组的正则表达式,一个在开始时捕获已知值,其余将捕获字符串的其余部分:

rx = /\A(RPX|RO|P)(.*)/m
"PIXRT".scan(rx)
# => [P, IXRT]

详细信息

  • \A
    -字符串的开头
  • (RPX | RO | P)
    -必须位于字符串开头的值之一(请注意这些选项的顺序:长的优先!)
  • (.*)
    -字符串末尾的任何0+字符(
    m
    修饰符也将使
    匹配换行符)
def split_after_start_string(str, *start_strings)
  a = str.split(/(?<=\A#{start_strings.join('|')})/)
  if a.size == 2
    a
  elsif start_strings.include?(str)
    a << ''
  else
    nil
  end
end

start_strings = %w| P RO RPX |                    #=> ["P", "RO", "RPX"]

split_after_start_string('PIXR', *start_strings)  #=> ["P", "IXR"] 
split_after_start_string('IPXR', *start_strings)  #=> nil 
split_after_start_string('ROXP', *start_strings)  #=> ["RO", "XP"] 
split_after_start_string('RPX',  *start_strings)  #=> ["RPX", ""] 
/(?<=\A#{start_strings.join('|')})/               #=> /(?<=\AP|RO|RPX)/