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

时间:2018-01-09 00:45:11

标签: regex

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

1FX9JE - 2012 Audi A3 Ambition Sportback MY12 Stronic

我想匹配除了rego号码之外的所有内容,所以在破折号之后的所有内容。

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

\s.[^-]*$

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

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

即使在第一个短划线后字符串包含额外的短划线,我仍然可以在第一个短划线后匹配任何内容。

谢谢

2 个答案:

答案 0 :(得分:1)

试试这个正则表达式:

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

Click for Demo

<强>解释

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

答案 1 :(得分:1)

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

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

否则如果可能有多个空格,请从匹配

中获取组(1)
(?<=\-)\s*(.*)
  

(?&lt; = ...)确保给定的模式匹配,结束于   表达式中的当前位置。模式必须有一个固定的   宽度。不消耗任何字符。