正则表达式不会在第一个空间停止

时间:2012-02-17 14:11:04

标签: regex

尝试创建一个与左括号匹配的模式,并获取它与它遇到的下一个空间之间的所有内容。 我认为\[.*\s会实现这一点,但它从第一个开始括号中获取所有内容。我怎么能告诉它在下一个空间打破?

5 个答案:

答案 0 :(得分:7)

\[[^\s]*\s

.*是一个贪婪的人,会吃掉所有东西,包括空格,直到最后一个空格字符。如果将其替换为\S*[^\s]*,则它只会匹配除空白之外的零个或多个字符块。

可能需要屏蔽开口支架。如果用^ \ s否定\ s,表达式应该吃除空格之外的所有内容,然后是空格,这意味着直到第一个空格。

答案 1 :(得分:4)

您可以使用不情愿的限定符:

[.*?\s

或者匹配所有非空格字符:

[\S*\s

答案 2 :(得分:3)

使用此:

\[[^ ]*

这与左括号(\[)匹配,然后与空格([^ ])之外的所有内容匹配零次或多次(*)。

答案 3 :(得分:3)

我建议使用\[\S*(?=\s)

  • \[:匹配[个字符。
  • \S*:匹配0个或更多非空格字符。
  • (?=\s):匹配空格字符,但不要将其包含在模式中。此功能称为零宽度正向前瞻断言,并确保仅在匹配后跟一个空格进行匹配,因此它在行尾不匹配。

如果您不关心群组并希望包含最终空间,您可能会使用\[\S*\s,但您必须明确说明哪些模式需要匹配,哪些不应该匹配。

答案 4 :(得分:1)

您希望将.替换为[^\s],这将匹配“not space”而不是.暗示的“任何”