0

我想根据模式检查发布的内容。我在设置这个 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
}
4

3 回答 3

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

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

于 2009-11-15T10:33:27.087 回答
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

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

当然,您可能需要适应[A-Z]+其他情况。

于 2009-11-15T10:43:36.867 回答
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
}
于 2009-11-15T11:04:10.007 回答