当前位置: 首页 > 知识库问答 >
问题:

RegEx:如何匹配所有字符直到下一次匹配?[重复]

咸昀
2023-03-14

我有这样一个字符串:

Hello [@foo] how are you [@bar] more text

最终,我需要修改匹配的子字符串的每个实例,但我还需要修改[@foo][@bar]之前/之后的每个子字符串。

下面的正则表达式匹配a[@]之前的子字符串 [@] 本身,然后是[@]后面的子字符串

(.*?)(\[(@.+?)\])((.(?!(\[@.+?\])))*)

第一个匹配是“你好[@foo]你好”,第二个匹配是“[@bar]更多文本”。

注意第二个匹配开始时的空格。这就是问题所在。有没有办法让第一个匹配包含所有字符直到下一个[@. ]

我的正则表达式包含[@]后面的字符 后面没有〈code〉[@]的实例 ,我无法找到任何方法使其包含所有字符,直到我们实际处于另一个<代码>[@]实例中

我真的很感兴趣的是我是否遗漏了什么-我当然觉得应该有一种更简单的方法来捕捉给定匹配周围的角色,或者一种更简单的方法来捕捉不属于匹配的角色。。。


共有3个答案

充普松
2023-03-14

这个正则表达式可能会帮助你获得这些变量。

(?:\[@[A-Za-z0-9]+\])

您还可以将任何其他字符添加到[A-Za-z0-9],例如@

`[A-Za-z0-9\.\+\@]` 

并根据需要更改它:

(?:\[@[A-Za-z0-9\.\+\@]+\])
殷德本
2023-03-14

如果我理解正确,您希望将文本分成组,每个组都有一个[@. ]实例,并且所有文本都必须匹配到一个组中。

试试(?:^. *?)? \[@. ? \]. *?(? =\[|$)

孔征
2023-03-14

你有这个正则表达式:

(.*?)(\[(@.+?)\])((.(?!(\[@.+?\])))*)
                   ^

看那个点。它先于消极展望。仅当满足负前瞻性时,它才匹配数据单元。如果负前瞻失败,dot将不匹配。这发生在匹配前的字符上。因此不包括空格字符。

要包含它,您只需更改顺序。将点放在传递负前瞻之后:

(.*?)(\[(@.+?)\])(((?!(\[@.+?\])).)*)
                                 ^

在此处观看现场演示

 类似资料:
  • 基于正则表达式直到但不包括,我试图匹配所有字符,直到一个单词边界。 例如,在以下字符串中匹配: 我正在使用: 一个否定集 有字边界 和一个加号中继器 这样地: 它应该查找一个“a”,然后为任何非单词边界的字符获取一个或多个匹配项。所以我希望它在

  • 我尝试了这种模式,但发现第一个匹配的句子带有符号

  • 我面临着与Java的匹配器的其他问题。我试图使用正则表达式匹配我的JSON的内容,而不使用外部库。我的JSON看起来像这样: 但是,我只想匹配上半部分中的单词,即在第一个匹配。我试图创建一个新的模式和匹配器,但我不知道如何进行,也不知道如何在第一次出现

  • 这是打算在Java中使用的。想象以下示例输入: 我想匹配至少一个数字后面的所有字母字符。 所需输出:

  • 我需要匹配一个字符串有单词而不是数字,我需要匹配特殊字符,如 $!:{} _如果它们是单词的一部分,但忽略其他。 我有一个正则表达式,它匹配单词并忽略数字,但如果特殊字符是单词的一部分,则无法计算出如何匹配,否则忽略。 这是我的正确答案-

  • 我试图找出我的字符串是否包含从a到z的所有字母 我们可以通过其他方法解决这个问题,但我正在尝试仅使用模式和匹配器来解决它。