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