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:BBCC:DD」または「AA:BB \ nCC:DD」と一致し、「AA:BB fooCC: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

上記と一致する場合は、2 つ以上の連続する空白文字\s{2,}を 1 つの改行に置き換えます。

もちろん、[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 に答える