为什么添加+量词会跳过应该匹配的部分字符串?

时间:2019-04-22 13:39:39

标签: regex pcre regex-greedy

我编写正则表达式将UNIMARC参考书目嵌入子字段转换为标准子字段。因此,我需要更改/翻译子字段名称(例如,将$a更改为$t)。我使用带有分支重置https://www.rexegg.com/regex-trick-conditional-replacement.html的Pool技巧,通常效果很好。

仅在$1200之后的下一个$1子字段之后才发生此更改。我将此条件添加为第一个捕获组。并添加了文本对比选择,直到下一个子字段(以$开头)为止,以移动光标并为下一个匹配做准备。

代码:https://regex101.com/r/cSBwlU/1

(?sx)(\$1200[\d ]{2})
(?:(?|
\$a(?=.*(\$t))
|\$d(?=.*(\$l))
|\$e(?=.*(\$o))
|\$f(?=.*(\$f))
|\$g(?=.*(\$g))
)([^\$]*))+

输入字符串:

  

$ 1 2001 $ a Здоровьемладенца $ e энциклопедия $ f пер。 сангл。 И。 Стариковская

预期输出:

  

$ t Здоровьемладенца $ o энциклопедия $ f пер。 сангл。 И。 Стариковская

没有量词的正则表达式匹配并转换第一个子字段:

  

$ t Здоровьемладенца $eэнциклопедия$fпер。 сангл。 И。 Стариковская

第一个捕获组匹配字符串的开头。

第一个非捕获组将子字段名称与其内容匹配。我希望添加+量词将匹配其余子字段,直到$1。但是当正则表达式以+结尾时,实际结果只是最后一组。

  

$ f пер。 сангл。 И。 Стариковская

为什么跳过行首和之前的比赛?

0 个答案:

没有答案