根据模式检查字符串

时间:2009-11-15 09:34:34

标签: php string preg-match file-get-contents

我想根据模式检查发布的内容。我在设置这个preg_match(或数组?)时遇到了问题。模式是......

TEXTHERE:TEXTHERE
TEST:TEST
FILE:FILE

TEXTHERE:TEXTHERE TEST:TEST FILE:FILE

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

TEXTHERE:TEXTHERE

TEST:TEST

FILE:FILE

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

TEXTHERE:TEXTHERE
TEST:TEST
FILE:FILE

仍然与模式匹配。

我希望它仍能正常工作,通过剥离额外的换行符和/或额外的空格......

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

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

if($loader == ???) { // done
} else { // error
}

3 个答案:

答案 0 :(得分:1)

   preg_match('~^\s*(\S+:\S+(\s+|$))+$~', $str)

这匹配“AA:BB CC:DD”或“AA:BB \ n CC:DD”并且在“AA:BB foo CC:DD”上失败

答案 1 :(得分:1)

尝试这样的事情:

$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 :(得分:0)

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
}