gpt4 book ai didi

regex - PCRE 正则表达式捕获组可以是数字或字母,但不能只是数字

转载 作者:行者123 更新时间:2023-12-04 07:40:33 25 4
gpt4 key购买 nike

我已经看到许多与此非常相似的问题,但他们无法完全收集我正在寻找的内容。
我有一个搜索系统,用于在 SQL 字符串中查找名为占位符的 PDO。
PDO 占位符可以是 A-z , 0-9 , 或 _并且始终以 : 开头.然而,在某些情况下,日期和时间值也会出现,它们自然使用 :。 (12:35)。
我需要检查以找到与 PDO 标准匹配但不仅仅是数字的占位符。
我可以在单个正则表达式中执行此操作吗?
我目前开发的正则表达式是:

/:(?:[A-Z_]*)(?=[0-9]*)/gmi
但这会在找到任何数字时中断,请参见下面的示例 SQL:
SELECT name, horse, id, DATE_FORMAT(Nee.datetimed, '12:12:12 @ %D') as del_time 
FROM members WHERE biztype LIKE CONCAT('%',:bizb,'%')
AND (locate LIKE '%hos%' OR locate LIKE '%all%')
AND bizcat LIKE CONCAT('%',:catb7,'%') ORDER BY `status` DESC, RAND()
我需要捕获 :catb7:bizb但忽略时间值。
我上面的正则表达式捕获 :bizbcatb但是那个捕获是不正确的,因为它切断了 7。
 /:(?:[A-Z_]*(?:[0-9]*))/gmi

渔获 :12:12这是不正确的。
 /:(?:[A-Z_]*)(?=[0-9]*)/gmi 

渔获 :以及这是不正确的。
对捕获组的各种调整和更改似乎无法找到正确的结果:寻找:
:<any letter or number or underscore, any length, must contain at least one letter or underscore>

  • Valid catches:

      :adbcd
    :5fedg
    :56_gt
    :der
    :9_6

    INVALID catches:

     :12 
    :1
    :%D [MySQL date formatting]

    最佳答案

    您可以使用

    \B:(?!\d+\b)\w+
    regex demo .
    细节:
  • \B - 非单词边界位置(字符串开头或非单词字符必须立即出现在当前位置的左侧)
  • : - 冒号
  • (?!\d+\b) - 如果有一个或多个数字后跟紧靠当前位置右侧的单词边界,则匹配失败的负前瞻
  • \w+ - 一个或多个单词字符(字母/数字/下划线)
  • 关于regex - PCRE 正则表达式捕获组可以是数字或字母,但不能只是数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67502468/

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