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

使用正则表达式选择所需捕获组之前的最后一个模式,而不是第一个模式

钱振
2023-03-14

我有一个模式,我想从字符串链接捕获这个:

**这个号码****这个号码****这个号码***我说是***这个号码**

我想捕获文本的地方,我说是。由于我所要做的就是 ** 和 ,我尝试了一个正则表达式,但它从第一个 ** 一直返回匹配项,而不是在我的模式之前返回匹配项请参阅下面的正则表达式 101:

https://regex101.com/r/kUBxQf/1

共有2个答案

翟鸿振
2023-03-14
匿名用户

像这样的东西怎么样:

/[A-Z]\s*[A-Z]*(?=\sYES)/

这使用前瞻来捕获直接在单词< code>YES前面的两个大写单词。

每个单词用空格分隔,上面的正则表达式直接忽略YES之前的空格。

const string = '**THIS NO** **THIS NO** **THIS NO** **I SAID YES** **THIS NO**';
console.log(string.match(/[A-Z]\s*[A-Z]*(?=\sYES)/));

曹均
2023-03-14

你使用的正则表达式\*\*(? P

**这个号码****这个号码****这个号码***我说是**

您可以更新您的正则表达式以匹配 **,并且在匹配之后立即匹配而不是 * [^*],直到您遇到 YES。

<代码>\*\*(? P

这将匹配组中的我说是捕获

说明

    \
  • *\* 匹配 **
  • (?P

 类似资料:
  • 我有一个包含行的文本文件,其中一些行的格式如下: 3个选项卡, 如果几句话之后,最后换行 我需要一个接一个地抓住这些行中的单词(用文本中每个单词的索引) 我想到了一个使用2个正则表达式模式和2个循环的解决方案(添加了下面的代码),但是我想知道是否有更好的解决方案只使用一个正则表达式模式。 以下是文本中的行的示例:

  • 问题内容: 我想多次匹配某些模式,就像这里描述的一样。 例如,这将匹配: 但是,以上代码在pcre中有效,在java中不起作用。它在(?1)上给我一个错误“未封闭的期权组” 有什么办法吗?我有一个很长的正则表达式模式,如果可能的话,我不想重复2次。 问题答案: 在查阅Java文档时,他们仍然不遵循PCRE子例程准则。Java Regex基本上不支持子例程。 另请参见JavaRegex手册

  • 我正在纠结于捕获最后一组--使用我的正则表达式,只有第一行匹配模式,而不是其他两行。如果我将正则表达式更改为,则所有3行都匹配,但第一行捕获不成功(我只获得1组,而不是2组和)。 如何编写这个正则表达式,使所有行都有5个匹配组?

  • 问题内容: 我是新来的正则表达式,并且想知道如何用短语来表示最后一个之后的所有东西。 我正在提取Google GData使用的ID。 我的示例字符串是 ID在哪里: 哦,我在用PHP。 问题答案: 这至少匹配以下项之一(非斜杠),然后是字符串的结尾: 笔记: 没有理由,因为它不需要任何组-结果进入组0(匹配项本身)。 使用(而不是),以便如果最后一个字符是斜杠,则它不匹配(而不是匹配空字符串)。

  • 我目前拥有的正则表达式是: 它捕获了其中一个“.”(第1组)第2-4组为空 或: 一组小写、点、破折号。以小写字母开头(第2组) ——后跟可选星号(第3组) ——后跟方括号内的可选内容(第4组) 我有两个问题,第一个是让第二组必须以字母结尾,我尝试了很多方法,包括: 能杀死3-4组的任何生物 这似乎没什么不同 我遇到的另一个问题是组4,它不依赖于方括号(这是有意义的,因为我有*字符为他们)...但

  • 我试图使用正则表达式来检查字符串中的第一个和最后一个字符是否是a-z之间的字母字符。 我知道这与第一个字符匹配: 但是我如何检查最后一个字符呢? 这: 不起作用。我怀疑这两个条款之间应该有什么区别,但我不知道是什么!