代码之家  ›  专栏  ›  技术社区  ›  Phurich.P

正则表达式:第一次冲刺后匹配所有内容

  •  0
  • Phurich.P  · 技术社区  · 8 年前

    我有一个字符串,其中包含汽车的rego编号

    1FX9JE - 2012 Audi A3 Ambition Sportback MY12 Stronic
    

    我想匹配除rego数字以外的所有内容,所以在破折号之后可以匹配任何内容。

    我提出的正则表达式是(php)

    \s.[^-]*$
    

    只有当字符串只包含1个破折号时,我的初始正则表达式才能匹配破折号之后的任何内容。例如 https://regex101.com/r/Jao8W0/1

    但是,如果字符串有多个破折号。正则表达式不可用。 例如: https://regex101.com/r/Jao8W0/2

    即使字符串在第一个破折号后包含额外的破折号,我是否仍可以在第一个破折号后匹配任何内容。

    非常感谢。

    2 回复  |  直到 8 年前
        1
  •  5
  •   Gurmanjot Singh    8 年前

    尝试此正则表达式:

    ^[^-\r\n]+-\s*\K.*$
    

    Click for Demo

    说明:

    • ^ -断言字符串的开头
    • [^-\r\n]+ -匹配1个以上既不是 - 也不是换行
    • -\s* -匹配第一个 - 在字符串中后跟0+空格
    • \K -忘记了目前为止匹配的所有内容
    • .* -匹配0个以上出现的任何字符
    • $ -断言字符串的结尾
        2
  •  1
  •   Shen Yudong    8 年前

    如果只有一个空格,则可以使用此模式:

    (?<=\-\s)(.*)
    

    否则,如果可能有多个空格,请从match中获取组(1)

    (?<=\-)\s*(.*)
    

    (?<=…)确保给定的模式匹配,以 表达式中的当前位置。图案必须具有固定的 宽度不使用任何字符。