【问题标题】:Exclude a certain match in a capturing group in regex在正则表达式的捕获组中排除某个匹配项
【发布时间】:2015-12-16 17:26:57
【问题描述】:

我有一个正则表达式捕获组,如果它也匹配某个模式,我想排除它。

这是我的捕获组:

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

如果 \n 后跟一个数字和字符,例如“1st”、“2nd”、“4dffgsd”、“3sf" 那么它应该在 BEFORE 数字之前停止匹配。

0-9 在捕获组中很重要。

到目前为止,我有这个模式 [0-9][a-zA-Z]+ 来匹配数字后跟字符。如何将此作为条件应用于捕获组?

更新:

https://regex101.com/r/zL1tL8/4

第 1 行是错误的。

它不应匹配数字后跟字符

【问题讨论】:

  • 你能发布正则表达式的文本而不是它的链接吗?
  • 不清楚\n 是换行符 (0x0a) 还是文字 \ 加上 n。也不清楚您要匹配的内容。
  • 嗨,我已经编辑了示例正则表达式。我真正想要的是取消匹配,如果有一个数字后跟字符 \n1st 不应该匹配第一个。但它应该匹配 \n$300 或 \n599
  • 你看我下面的回答了吗?它应该可以满足您的需求。

标签: php regex preg-match-all


【解决方案1】:

如果后面的内容与您的模式匹配,您将需要使用 否定前瞻 来“停止”匹配。所以,这样的事情可能会奏效:

(\\n(?![0-9][a-zA-Z]))

在此处查看它的使用情况:https://regex101.com/r/zL1tL8/2

这是一个页面,其中包含有关前瞻和后瞻的更多信息:http://www.rexegg.com/regex-lookarounds.html

【讨论】:

  • 假设 OP 知道如何捕获 "\n" 之后的所有内容,但为了完整起见,^\\n(?![0-9][A-Z])(.+)$ 包含一个捕获组,它捕获 "\n" 之后的所有内容(如“i”用于链接示例,我从字符类中省略了“a-z”)。给定“m”修饰符,“^”和“$”锚是必需的。
猜你喜欢
  • 1970-01-01
  • 2010-12-03
  • 2014-06-26
  • 2022-11-12
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
  • 1970-01-01
相关资源
最近更新 更多