【问题标题】:Regex pattern loop正则表达式模式循环
【发布时间】:2021-03-07 18:16:20
【问题描述】:

我有一个具有特定格式的字符串,我想检查它。要检查这种格式是否正确,我想使用正则表达式。但是字符串格式“12345x”可以是无穷无尽的。示例“12345t12345x”。

如果格式只使用一次,我的正则表达式模式是:

function useRegex($input) {
    $regex = '/^[0-9]+[a-zA-z]+$/i';
    return preg_match($regex, $input);
}
echo useRegex("12045t");

如果字符串是“12345t12345u”,我的代码无法检查它。所以我的问题是我是否可以通过字符串循环我的正则表达式模式?

【问题讨论】:

  • 只需使用preg_match_all('~\d+[A-Z]+~i', $input, $matches) 提取所有这些匹配项。如果要验证字符串,请使用 preg_match('~^(?:\d+[A-Z]+)+$~iD', $input)。如果你需要提取和验证,它会有点复杂,但可能。
  • 这不适用于我的字符串格式。格式是每次 0-9 的 5 个随机数,然后是一个随机字符,这种格式可以是循环或堆栈无穷大。我想用正则表达式检查这个确切的格式。但是长度不是静态的,可以是单独的,所以我需要一个可以无限的正则表达式模式
  • 那么,preg_match('~^(?:\d{5}[A-Z])+$~iD', $input)?

标签: php regex loops


【解决方案1】:

你可以使用

preg_match('~^(?:\d{5}[A-Z])+$~iD', $input)

请参阅regex demo

详情

  • ^ - 字符串开头
  • (?:\d{5}[A-Z])+ - 一次或多次出现:
    • \d{5} - 五位数
    • [A-Z] - 单个 ASCII 字母(不区分大小写,由于 i 标志)
  • $ - 字符串结束。

D flag 停止匹配,如果在字符串的末尾有一个尾随 \n。如果允许尾随换行符,您可以删除该标志。

【讨论】:

    猜你喜欢
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 2011-01-27
    相关资源
    最近更新 更多