regex - 在 RegEx 中强制执行匹配顺序

标签 regex

我正在为 ISBN 解析一些搜索查询文本。每行可能包含零个或多个 ISBN10、零个或多个 ISBN13 以及其他不相关的数字。文本已被净化为仅包含 [a-zA-Z0-9 ],但相关数字之间可能有空格。我已经成功编写了一些正则表达式片段来解析文本,但我不确定如何让它们按照我想要的顺序执行。

首先,这是来自数据的示例文本行:

foo ISBN10 013 284 1649 0132841648 Web ISBN13 9 78013 2841641 9780132841641 2013 bar

我需要(按此顺序):

  1. 在整个字符串中搜索 ([9][7][8-9]\d{10})
  2. 仅搜索尚未匹配的内容 (\d{10})
  3. 仅搜索尚未匹配的内容 ([9]\s*[7]\s*[8-9]\s*(\s*\d ){10})
  4. 仅搜索尚未匹配的内容 (\d(\s*\d){9})

这完成了搜索完整的 ISBN13,然后是完整的 ISBN10,然后是碎片化的 ISBN13,最后是碎片化的 ISBN10。但是,如果我简单地将它们粘贴在一起,用 | 分隔,RegEx 引擎会为每个字符计算 (1,2,3,4)。在考虑评估 #2 之前,我如何在整个字符串中搜索表达式 #1?

最佳答案

执行四次 replaceAll 并在每一步中删除成功的匹配项(即,将它们替换为 "")。

关于regex - 在 RegEx 中强制执行匹配顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33884072/

相关文章:

javascript - 正则表达式难题

ruby - 如何检查命名组是否存在于 MatchData 对象中?

C:正则表达式与浮点文字不匹配

javascript - 查找与给定字符串中的两个子字符串匹配的正则表达式

regex - Perl 中的递归正则表达式

javascript - JavaScript 中正则表达式的意外行为

java - 在Java中获取第一组正则表达式

javascript - 如何替换不在 id ="*"中的字符串?

javascript - 如何将 javascript 中的 url 与正则表达式匹配

PHP/正则表达式 : Check the format of an input