代码之家  ›  专栏  ›  技术社区  ›  homework

根据模式检查字符串

  •  0
  • homework  · 技术社区  · 15 年前

    我想根据模式检查发布的内容。我在设置这个preg_匹配(或数组?)模式是…

    TEXTHERE:TEXTHERE
    TEST:TEST
    FILE:FILE
    

    TEXTHERE:TEXTHERE TEST:TEST FILE:FILE
    

    我想检查两种模式,一种是空白模式,另一种是换行模式。 如果发布的内容是…(带有额外的换行符和/或空格)

    TEXTHERE:TEXTHERE
    
    TEST:TEST
    
    FILE:FILE
    

    我希望它以某种方式显示为…

    text此处:text此处
    试验:试验
    文件:文件
    

    仍然与模式匹配。

    我希望它仍然有效,通过剥离额外的换行符/和/或额外的空白…

    $loader = file_get_contents( 'temp/load-'.$list.'.php' );
    

    如果它不遵循字符串模式,我希望它输出一条错误消息等。

    if($loader == ???) { // done
    } else { // error
    }
    
    3 回复  |  直到 15 年前
        1
  •  1
  •   Bart Kiers    15 年前

    尝试如下操作:

    $loader = 'TEXTHERE:TEXTHERE
    
    TEST:TEST
    
    FILE:FILE';
    
    if(preg_match('/^[A-Z]+:[A-Z]+(\s+[A-Z]+:[A-Z]+)*$/', $loader)) {
        echo preg_replace('/\s{2,}/', "\n", $loader);
    }
    

    输出:

    TEXTHERE:TEXTHERE 
    TEST:TEST
    FILE:FILE
    

    您将获得相同的输出:

    $loader = 'TEXTHERE:TEXTHERE        TEST:TEST          FILE:FILE';
    

    首先检查它是否匹配:

    [A-Z]+:[A-Z]+    # match a word followed by a colon followed by a word
    (                # open group 1
      \s+            #   match one or more white space chars (includes line breaks!)
      [A-Z]+:[A-Z]+  #   match a word followed by a colon followed by a word
    )*               # close group 1 and repeat it zero or more times
    

    如果与上面的匹配,则替换2个或更多连续的空白字符 \s{2,} 只有一个换行符。

    当然,你可能需要调整 [A-Z]+ 去别的地方。

        2
  •  1
  •   user187291    15 年前
       preg_match('~^\s*(\S+:\S+(\s+|$))+$~', $str)
    

    这与“aa:bb cc:dd”或“aa:bb\n cc:dd”匹配,并在“aa:bb foo cc:dd”上失败。

        3
  •  0
  •   Brandon G    15 年前
    if(preg_match_all('/([A-Za-z0-9-_\.:]+)[\n\s]*/', $subject, $matches)){
      print $matches[0][0]."<br />".$matches[0][1]."<br />".$matches[0][2];
    }else{
      // error
    }
    
    推荐文章