Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检查此特殊字符串_Php_Regex - Fatal编程技术网

Php 如何检查此特殊字符串

Php 如何检查此特殊字符串,php,regex,Php,Regex,我有一个特殊的字符串要用PHP脚本检查。格式如下: XX - XX:XX:XX - Somethings 例如: 每个XX必须是??或一对数字 第一个XX可以取各种数字 第二个XX必须介于00和10之间 第三个和第四个XX必须介于00和59之间 有些东西可以是一切,这并不重要 以下是一些例子: 00 - ??:??:?? - Blablabla // OK 99 - ??:99:?? - Blablabla // NO (99 is too high) 99 - 12:50:40 - Blab

我有一个特殊的字符串要用PHP脚本检查。格式如下:

XX - XX:XX:XX - Somethings
例如:

  • 每个XX必须是
    ??
    或一对数字
    
  • 第一个XX可以取各种数字
  • 第二个XX必须介于00和10之间
  • 第三个和第四个XX必须介于00和59之间
  • 有些东西可以是一切,这并不重要 以下是一些例子:

    00 - ??:??:?? - Blablabla // OK
    99 - ??:99:?? - Blablabla // NO (99 is too high)
    99 - 12:50:40 - Blablabla // NO (12 is too high)
    ?? - AA:50:40 - Blablabla // NO (AA is not a pair of digit)
    99 - 2:50:40 - Blablabla // NO (2 is not a pair of digit; I need 02)
    99 -08:49:40 - Blablabla // NO (-08 need a space)
    

    我怎么做?我认为最好的方法是正则表达式,但我真的不知道怎么做:)谢谢你的帮助

    $subj = '00 - 04:38:27 - Hi';
    preg_match('/^(\?\?|\d\d) - (\?\?|10|0\d):(\?\?|[0-5]\d):(\?\?|[0-5]\d) - (.*)/', $subj, $matches);
    
    然后您可以访问匹配项中的字段:

    $matches[1] = 00
    $matches[2] = 04
    $matches[3] = 38
    $matches[4] = 27
    $matches[5] = Hi
    

    你可以这样做

    $subj = '00 - 04:38:27 - Hi';
    preg_match('/^(\?\?|\d\d) - (\?\?|10|0\d):(\?\?|[0-5]\d):(\?\?|[0-5]\d) - (.*)/', $subj, $matches);
    
    然后您可以访问匹配项中的字段:

    $matches[1] = 00
    $matches[2] = 04
    $matches[3] = 38
    $matches[4] = 27
    $matches[5] = Hi
    
    这似乎可以完成任务(在进行测试)
    /([0-9\?]{2}-(0[0-9]| 10 |?\?):([0-5][0-9]|?\):([0-5][0-9]|?\?)-*)/
    这似乎可以完成工作(在进行测试)

    /([0-9\?]{2}-(0[0-9]| 10\?):([0-5][0-9]| \?):([0-5][0-9]| \?)-.*)/

    你试过阅读例如手册吗?()您面临的具体问题是什么?例如,我不知道如何说“2位数的数字是从0到10的”:)这一组字符有什么“特殊”之处?00到10对于第2个数字来说似乎是一个奇怪的范围,我本以为是00到23;-)你试过阅读手册吗?()您面临的具体问题是什么?例如,我不知道如何说“2位数的数字是从0到10的”:)这一组字符有什么“特殊”之处?00到10对于第2个数字来说似乎是一个奇怪的范围,我本以为是00到23;-)似乎有用!你真的很摇滚!!!它为我节省了许多行代码:)而且我已经理解了它为什么能工作!呵呵。只有一件事:regex开头的“/是什么意思?和/或最后?这是如何用perl编写正则表达式(用斜杠括起来)。由于PHP松散地基于perl,它继承了这种语法。你可以用f.ex。在终止斜杠后向正则表达式引擎写入标志,如“/…/i”(使其不区分大小写);否则,该模式将匹配可能与您的格式不匹配的行。确保得到更改。我刚刚发布了(而不是删除了)关于^的评论。你更快了+1。嗯…补充!但还是不理解开头/结尾的这些符号。现在^too:)似乎起作用了!你真的很摇滚!!!它为我节省了许多行代码:)而且我已经理解了它为什么能工作!呵呵。只有一件事:regex开头的“/是什么意思?和/或最后?这是如何用perl编写正则表达式(用斜杠括起来)。由于PHP松散地基于perl,它继承了这种语法。你可以用f.ex。在终止斜杠后向正则表达式引擎写入标志,如“/…/i”(使其不区分大小写);否则,该模式将匹配可能与您的格式不匹配的行。确保得到更改。我刚刚发布了(而不是删除了)关于^的评论。你更快了+1。嗯…补充!但还是不理解开头/结尾的这些符号。现在是^too:)