【问题标题】:PHP Regex to find words containing both letters and numbersPHP Regex 查找同时包含字母和数字的单词
【发布时间】:2012-05-03 21:14:42
【问题描述】:

我正在开发一个解析广告的 PHP 脚本,我想添加一个正则表达式来查找特殊代码,这些代码可以是任意长度,但由任意顺序或任意长度的字母和数字组成。我只是不确定正确的语法是什么。我找到了允许字母或数字的模式,或者需要特定的字母和数字模式,但不是几乎随机的混合。

任何建议将不胜感激。

示例:在星期五之前使用优惠券代码 WID2010 购买 Widgets 20% 折扣

理想情况下,我想检测“WID010”这个词并用它来标记该项目以供其他用途。然而,这种格式不一定是一致的。可以预见的是,代码总是由至少一个字母和一个数字组成,没有空格或标点符号。

【问题讨论】:

  • 你能发布一些示例数据吗?
  • 大概不允许零长度的主题?你确实说了任何长度,但我怀疑它必须至少是一个字符?
  • 添加了一个示例。目标词至少是两个字符,一个字母和一个数字。

标签: php regex


【解决方案1】:

这样的代码确实包含

  • 任意数量的字母(最少 1 个)后跟一个数字以及任意数量的字母和/或数字(最少 0 个)
  • 或任意数量的数字(最少 1 个)后跟一个字母和任意数量的字母和/或数字(最少 0 个)

写成捕获组:

((?:[a-zA-Z]+[0-9]|[0-9]+[a-zA-Z])[a-zA-Z0-9]*)

【讨论】:

    【解决方案2】:

    类似:

    (?=\w*[a-z])(?=\w*[0-9])\w+

    这会先查找一个字母,然后是一个数字,并将字母和数字(单词)与每个字母和数字(单词)中的至少一个进行匹配。

    ideone

    【讨论】:

    • 不会先行搜索捕获后的内容吗?就像捕获前的后视搜索一样?环视不包括捕获内容本身。我想这不会按预期工作,请测试一下。
    • 我已经测试过了,它工作正常。这类似于许多常见的正则表达式,用于验证密码是否至少包含一个字母/数字/符号/大写/小写...等。
    • @Kaii 前瞻/后视/环绕不会捕获内容本身。但最后的\w+ 确实如此。环顾将意味着最后的\w+ 必须至少具有[a-z][0-9] 之一
    • 那么,+1。对.. 取决于您将环视断言放在哪里,无论它是否跨越实际捕获
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多