0

我正在尝试以下操作:

.+\?[^\?].+\?

也就是说,匹配所有内容直到一个“?”,然后,如果没有其他“?” 之后,匹配所有内容直到另一个“?”。我猜它不起作用,因为第一个 .+ 已经匹配整个字符串。

4

1 回答 1

4

您的描述不准确,但这是我假设您需要正则表达式来满足的规则:

  1. 零个或多个不是“?”的字符
  2. 一种 '?'
  3. 一个或多个不是“?”的字符
  4. 一种 '?'

这实际上很简单。

[^?]*\?[^?]+\?

请注意,这将匹配较大字符串的子字符串。如果您需要确保整个字符串与此完全匹配,请输入^$锚定:

^[^?]*\?[^?]+\?$

解释:

  1. ^

    字符串的开始。在多行上下文中,这也匹配行首,但您可能不在多行上下文中。

  2. [^?]

    匹配任何不是文字字符 ' ?' 的内容。

  3. *

    匹配零个或多个前一个标记。

  4. \?

    匹配文字' ?'。

  5. [^?]

    匹配任何不是文字字符 ' ?' 的内容。

  6. +

    匹配一个或多个前一个标记。这样可以确保您不能?连续有两个 ' '。

  7. \?

    匹配文字' ?'。

  8. $

    匹配字符串的结尾(或多行上下文中的行结尾)。


?注意:我假设在第一个''之前有零个或多个非' ?'。这将匹配类似?abc?. 如果这是非法的,请将第*一个更改为+.

于 2012-08-17T23:48:57.197 回答