正则表达式匹配第一次出现的字符串

时间:2012-05-12 20:38:12

标签: regex

我有这个字符串:

  

城市 - 这是一些文字。这是更多 - 并继续在这里。

我想在第一个' - '分割字符串以找到'city'(只是一个示例单词,它也可以是其他单词)。另外,在“ - ”之后找到文本的其余部分。

我构造了这个表达式:

(^[\D\W\S]*)( - )([\D\W\S]*)

但这会发现最后一次出现' - '而不是第一次出现。

如何在第一次出现时停止?

1 个答案:

答案 0 :(得分:39)

最简单的解决方案是明确禁止短划线成为第一组的一部分:

^([^-]*) - (.*)

<强>解释

^        # Start of string
([^-]*)  # Match any number of characters except dashes
\ - \    # Match a dash (surrounded by spaces)
(.*)     # Match anything that follows

但是,如果你的字符串 在第一组中包含一个破折号(只是没有被空格包围),那么这将失败。如果是这种情况,那么你可以使用惰性量词:

^(.*?) - (.*)

<强>解释

^        # Start of string
(.*?)    # Match any number of characters, as few as possible
\ - \    # Match a dash (surrounded by spaces)
(.*)     # Match anything that follows