我正在使用以下正则表达式;
((?:_missing_:|_exists_:)[a-z0-9]+)|(([a-z0-9]+)(?=:))
匹配Lucene查询字符串;
_missing_:title age:(>=10 AND < 20) AND age:123 AND _exists_:title123
第一个非捕获组不受尊重,并返回 _missing_:
title 而不是 title
。使用积极的前瞻会使整个正则表达式无法匹配任何内容。
它应该返回以下数组:;
['title', 'age', 'age', 'title123']
你想要的不是一个前瞻,而是一个前瞻:(?
/(?<=_missing_:|_exists_:)([a-z0-9]+)|([a-z0-9]+)(?=:)/
测试。
现在,< code>([a-z0-9] )
仅在后面有< code>_missing_:或< code>_exists_:时才匹配,但这些不是匹配的一部分。
第一个非捕获组受到尊重,当你:< code>/((?:_ missing _:| _ exists _:)[a-z0-9])/第一个组跨越整个< code>_missing_:title,第二个组是< code>_missing_:,但不会被捕获,并且< code>title不属于任何组。
但是,即使它没有被捕获,它仍然是匹配的,类似于 /(_missing_:[a-z0-9] )/
。你想要的是捕获标题
,所以你需要把它放在一个组()
中:/(?:_missing_:|_exists_:)([a-z0-9] ))/
。现在您有三个组:_missing_:title、_missing_:
(未捕获)和标题
。
您可以将外部组设置为非捕获:/(?:(?:_missing_:| _exists:)([a-z0-9]))/
,但没有必要,因为您实际上没有使用它,所以只需删除它:
/(?:_missing_:|_exists_:)([a-z0-9]+)/
现在第一组是title
。然而,这仍然是比赛的一部分,这似乎不是你想要的。
要将其从匹配中删除,您需要积极的回溯:
/(?<=_missing_:|_exists_:)([a-z0-9]+)/
此外,由于在第二部分中使用了积极的前瞻,所以没有必要将其放在外部组中,所以只需:
([a-z0-9]+)(?=:)
像下面这样更改正则表达式,然后从组索引1和2中获取您想要的字符串。
(?:_missing_:|_exists_:)([a-z1-9]+)|([a-z1-9]+)(?=:)
您不需要在捕获组中包含非捕获组(?:_missing_:|_exists_:)
。这就是返回缺少:title
而不是title
的原因。此外,为[a-z1-9]
捕获组就足够了。
演示
首先,regex需要同时适用于python和PCRE(PHP)。我试图忽略正则表达式模式后面是否有字母“x”,以区分维度和下面给定示例中的字符串(如“number/number”): 从这里,我试图提取,但不是因为该部分实际上是维度的一部分。到目前为止,我想出了这个正则表达式 它可以提取我不希望它提取的内容,它看起来像这样。如果我将正面展望更改为负面,它会捕获除 中的最后一个“3”之外的两个。它看
问题内容: 在下面的代码段中,匹配结果中的 非捕获组应被忽略, 结果应该是。 但是,我得到了匹配结果。仅当我指定group(2)时才显示。 问题答案: 并返回整个比赛。随后的组是实际的捕获组。 如果您想要相同的行为:
我用pcregrep写了一个正则表达式,一切都按预期进行,直到我添加了一个积极的前瞻。 场景: 我有以下文本文件: 目标: 我想在pcregrep中使用Regex来返回包含的行和包含的行,以及它们之间包含的行未被捕获。因此,它将捕获前三行(、、)并返回第一行()和第三行()。它不会捕获第四行和第五行,因为它们之间没有行。因此输出将是: 我尝试过的 如果我运行 (命令 1),这将捕获并返回: 不出所
问题内容: 我正在使用选择器为不同的社交图标添加背景图像。但是,所有图标都显示相同。我究竟做错了什么? 问题答案: 所述选择器计数的兄弟姐妹(即,元件具有相同父节点)。 在您的HTML结构中,始终是的第一个,最后一个也是唯一的孩子。因此只有一个要计数的元素。 但是,存在多个锚元素,所有锚元素都是同级(的子级),因此可以针对每个锚元素。
问题内容: 我正在尝试从JSON网址获取集合。骨干网确实发送了请求并得到了响应,但是在它之后的集合中没有: 这是我的JavaScript: 响应中的JSON 响应中的Content-Type HTTP标头为。 为什么不将其加载到集合中?JSON是否正确? 一些更多的代码: 问题答案: 是异步的。尝试 要么 要么
问题内容: 我有三部分字符串,每个部分用 符号分隔 。例如, 现在,当我使用这样的方法拆分它时: 它包含整个字符串作为单个元素的数组。 但是当我使用这个: 它完美的作品是什么,我想这意味着 现在的数组包含,并分别对指数0,1和2。 我想知道为什么第一次使用时不起作用,因为我在使用 问题答案: 因为字符是在正则表达式中用来标记行尾的保留令牌。因此,您必须使用进行 转义。