根据不同的规则,单词`ticket`的组合

时间:2018-02-06 15:30:29

标签: regex

我正在尝试找到一个单一的正则表达式模式,它将涵盖字符串'票据的所有情况。结合后面的数字字符串。规则是:

  1. ticket#digit
  2. ticket #digit
  3. ticket digit
  4. ticketdigit
  5. 示例输入:

    ticket500
    ticket 500
    ticket#500
    ticket #500
    Ticket500
    Ticket 500
    Ticket#500
    Ticket #500
    

    到目前为止,我已/ticket([\d]+)/i正确回应了#500; ticket500'。

    编辑:我正在研究大型数据库,它有很多不同的变体。我发现了一些建议解决方案未涵盖的其他案例。我真的需要PHP的单一正则表达式来涵盖所有上述情况以及以下情况:

    Ticket # 786
    Ticket: # 786
    Ticket: #786
    Ticket:# 786
    Ticket #: 786
    Ticket#: 786
    Ticket #:786
    

1 个答案:

答案 0 :(得分:-1)

此处不接受中间带“#”的所有组合,并将该号码与group(1)匹配:

[Tt]icket ?#?([0-9]+)

如果您不希望您的用户以八进制表示法输入票号,您可能还想在数字的开头排除零:

[Tt]icket ?#?([1-9][0-9]*)

更新:另一个版本符合2018-02-07更新的要求,即对空格和冒号和锐利的翻转顺序更加宽容:

[Tt]icket(?:(?: *:? *#? *)|(?: *#? *:? *))([\d]+)

在这里可以看到:https://regex101.com/r/itmr0G/2 对于case-(in)灵敏度,同样的评论适用:如果你的环境将模式编译为不区分大小写,如果你附加/i,那么请随意执行,如果这是所需的行为。< / p>