regex-group - 为什么我的正则表达式将一个角色放在与我预期不同的捕获组中?
问题描述
我有给定的字符串:
bar"{foo}"bar
bar{foo}bar
我试图让第一个和第三个捕获组都是公正bar
的。{foo}
对于每个匹配项,第二个捕获组应分别带有引号和不带引号。
我有以下正则表达式:
(^.*)("?\{.*\}"?)(.*$)
有了这些结果:
Match 1
Full match. bar"{foo}"bar
Group 1. bar"
Group 2. {foo}"
Group 3. bar
Match 2
Full match. bar{foo}bar
Group 1. bar
Group 2. {foo}
Group 3. bar
为什么"
角色不在第二组中?如果我在第二组中特别提到它,我不明白为什么它会在第一组中。我是否需要告诉第一组忽略它或将其用作右边界?
解决方案
当我写完这个问题时,我意识到我遇到的问题。我需要使用一个不情愿的量词,这样第一组就不会"
在下一组有机会之前抢到。
这是一个小的修正 - 我添加了.*?
(不情愿)而不是.*
(贪婪):
(^.*?)("?\{.*\}"?)(.*$)
很好的解释:贪婪 vs. 不情愿 vs. 占有量词
推荐阅读
- sql - Postgres 使用带有 `split_part` 的索引
- sql - T-SQL 完全外连接(提供示例)
- c# - 需要将离线和触控 ID 添加到 Microsoft 身份验证层
- dataweave - Dataweave 日期格式为 GMT 时区,夏令时
- crash - 在远程 X11 中:xclock 有效,但 gitk 或 git gui 无效
- flutter - 找不到消费者提供者的祖先或找不到提供者
- r - 如何在同一数据集中(可能使用 stringr)合并具有相同名称的数据?
- javascript - 每次用户单击元素时,Django 管理员都会添加一个自定义 js
- sql-server - SQL 合并语句,你应该使用它们吗
- javascript - 如何使用 C# 方法从 ASP.Net Javascript AJAX 请求返回布尔值?