gpt4 book ai didi

php - 仅当存在字母时才匹配数字的正则表达式

转载 作者:搜寻专家 更新时间:2023-10-31 21:02:02 26 4
gpt4 key购买 nike

我需要一个正则表达式以下列方式匹配字符串:

  • #1234abc :应该匹配
  • #abc123 :应该匹配
  • #123abc123 :应该匹配
  • #123:不应该匹配
  • #123_:不应该匹配
  • #123abc_ :应该匹配

这意味着只有当字符串包含数字或下划线以及字母时,它才应该被匹配。只有数字/下划线不应该匹配。也不应匹配任何其他特殊字符。

这个正则表达式基本上是从字符串中获取主题标签。我已经尝试了以下方法,但对我来说效果不佳。

preg_match_all('/(?:^|\s)#([a-zA-Z0-9_]+$)/', $text, $matches);

请提出一些建议。

最佳答案

如果您需要按照您在较大字符串中指定的格式匹配主题标签,请使用

(?<!\S)#\w*[a-zA-Z]\w* 

参见 regex demo

详细信息:

  • (?<!\S) - 之前必须有字符串开头或空格
  • # - 哈希符号
  • \w* - 0+ 个单词字符(即字母、数字或下划线)
  • [a-zA-Z] - 一封信(您可以使用 \p{L} 代替)
  • \w* - 0+ 个单词字符。

其他替代方案(可能看起来更快,但有点复杂):

(?<!\S)#(?![0-9_]+\b)\w+
(?<!\S)#(?=\w*[a-zA-Z])\w+

这里的要点是模式基本上匹配 1+ 个以 # 开头的单词字符那是在字符串开头或空格之后,但是 (?![0-9_]+\b) # 之后的部分的所有匹配均失败是所有数字/下划线,(?=\w*[a-zA-Z]) positive lookahead 要求在 0+ 个单词字符后至少有 1 个 ASCII 字母。

关于php - 仅当存在字母时才匹配数字的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40102532/

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