正则表达式:选择两个字符之间的所有内容?

61

我正在尝试编写一个正则表达式,用于选择两个字符之间的所有内容。

例如,当正则表达式遇到'§'时,我希望它能够选择'§'后面的所有内容,直到遇到';'为止。我尝试过使用回顾后发和预测先行,但它们并不能完全胜任此任务。

因此,例如" § 1-2 bla; "应返回" 1-2 bla"

非常感谢你的帮助!


3
请说明您正在使用的技术,因为正则表达式有许多“风格”,其语法和功能略有不同。 - Jay
1
等等,我第一次错过了这个……“我尝试使用回顾后发和前瞻,但它们并没有真正起到作用。”——为什么?出了什么问题?这是JavaScript吗? - Peter Boughton
2
因为我对正则表达式不熟悉,所以无法真正理解它。这是在Actionscript 3中使用的正则表达式,有时会出现非常奇怪的问题:) 感谢大家的回答,我已经让事情开始运作了! - Jaaq
4个回答

72

怎么样?

"§([^;]*);"

§;之间选择的字符可用作匹配组1。


2
这对我起作用了。但出于好奇,没有尾随分号也可以工作。为什么需要它? - uesports135
2
是的,最后的分号不是必需的。没有那个也能正常工作。 - MixCoded
如果在VSCode中使用,请删除分号和引号 - Andre Ravazzi

44

使用这个正则表达式

(?<=§).*?(?=;)

2
不兼容JavaScript。 - TetraDev
2
它兼容于 ECMAScript 2018 和更新版本。请查看关于在两个字符串之间匹配字符串的相关线程。 - Wiktor Stribiżew
1
这对于像"_Åä³¢±Í¸¶°³"这样被双引号包含的字符串在我的情况下有效,而其他答案则不行。 - SagunKho

19

对于简单情况,这应该可以做到:

§(.*);

如果您不想允许嵌套,则可能需要进行修改:

§(.*?);

8
这并不完全正确 - .* 是贪婪的,所以该表达式将匹配到最后一个遇到的 ;,而不是第一个。 - Peter Boughton
@Peter:这可能不是 OP 的问题,也可能正是 OP 实际想要的。 - SilentGhost
1
基于“直到正则表达式遇到';'为止”这一点,我认为它不应该贪婪。 - Peter Boughton
@Peter:根据给定的示例,量词是贪婪的还是不贪婪的并不重要。 - SilentGhost
正好我需要清除一些多余的小数值。 - monsto

11

如果你有多个§(字符示例),可以使用:§([^§]*)§

它将忽略两个§之间的所有内容,仅获取特殊字符之间的内容,因此如果你有像§What§ kind of §bear§ is best这样的内容,它会输出:§what§, §bear§

发生了什么?让我们分解表达式§、然后是([ ^ § ]*)、最后是§

  1. 1- 匹配 § 字符
  2. 2- 匹配除 § 以外的任何字符 [^§]0次或多次*
  3. 匹配 § 字符

希望对你有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接