gpt4 book ai didi

php - 使用 preg_match_all 将所有数字与正则表达式匹配

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:34:39 25 4
gpt4 key购买 nike

我有一个文本,并尝试为其中的每个 3 号数字添加链接。
我使用带有模式的 preg_match_all:(^|[^\d])(\d{3})($|[^\d])
此处使用分组来仅将链接添加到数字,而不添加到它们的邻居。测试用例是:

  1. a 123 234 b - 必须匹配 123 和 234
  2. a 123_234 b - 必须匹配 123 和 234
  3. aa123 234 b - 必须匹配 123 和 234
  4. a0123 234 b - 必须匹配 234
  5. 123a234 b - 必须匹配 123 和 234
  6. a 123 234 - 必须匹配 123 和 234

测试 2 和 3 工作正常,其他测试失败,因为 2 个数字之间有空格。
如何匹配两个数字之间只有 1 个空格?

最佳答案

您可以通过将最后一个捕获组替换为正面前瞻来“修复”您的正则表达式 - (^|[^\d])(\d{3})(?=$|[^\d]) - 允许重叠匹配。 ($|[^\d])组消耗了 3 位数字 block 和第一个 (^|[^\d]) 之后的空间无法匹配那个空间。 Surley,我会替换 [^\d]\D如果您更喜欢这种方法。

我建议使用负环视,因为这样看起来“更干净”:

(?<!\d)\d{3}(?!\d)
^^^^^^ ^^^^^^

参见 regex demo

详细信息:

  • (?<!\d) - 当前位置不应以数字开头
  • \d{3} - 3 位数
  • (?!\d) - 当前位置的右边不能有数字。

关于php - 使用 preg_match_all 将所有数字与正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42095653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com