正则表达式捕获组并在可选关键字之前中断

问题描述 投票:0回答:1

我正在使用 PCRE 正则表达式,我想捕获标签 ?31 和下一个 ?xx 标签之间的字符串,但下一个 ?xx 标签可以是可选标签

有没有办法让正则表达式完全按照我想要的方式做?

谢谢

正则表达式 输入 被捕获的团体 状态
?31(.*)(?:?\d{2}) xxx?31测试1?32测试2 测试1 好的
?31(.*)(?:?\d{2}) xxx?31测试1测试2 不适用 不行,应该是“测试1 测试2”
?31(.*)(?:?\d{2})? xxx?31测试1?32测试2 测试1?32测试2 不行,因为 ?32 是一起捕获的
?31(.*)(?:?\d{2})? xxx?31测试1测试2 测试1 测试2 好的
?31(.*?)(?:?\d{2})? xxx?31测试1?32测试2 不适用 不行,应该是“testing1”
?31(.*?)(?:?\d{2})? xxx?31测试1测试2 不适用 不行,应该是“测试1 测试2”
regex pcre
1个回答
0
投票

尝试使用下面的正则表达式:

^.*\?31([^?]+)(\?.*)?$
  • ^:断言字符串的开头。
  • .*:匹配任何字符(换行符除外)零次或多次。
  • ?: 匹配字面字符“?”。
  • 31:匹配文字字符“31”。
  • ([^?]+):匹配并捕获一个或多个非“?”的字符 进入一个团体。
  • (?.*)?:可选择匹配并捕获“?”后面跟着零个或多个 角色进入另一组。
  • $:断言字符串结尾。
© www.soinside.com 2019 - 2024. All rights reserved.