Проверка строки по шаблону - PullRequest
0 голосов
/ 15 ноября 2009

Я хочу проверить опубликованный контент по шаблону. У меня проблемы с настройкой этого 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 ]

1 голос
/ 15 ноября 2009

Попробуйте что-то вроде этого:

$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]+ на что-то другое.

1 голос
/ 15 ноября 2009
   preg_match('~^\s*(\S+:\S+(\s+|$))+$~', $str)

соответствует «AA: BB CC: DD» или «AA: BB \ n CC: DD» и завершается с ошибкой «AA: BB foo CC: DD»

0 голосов
/ 15 ноября 2009
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
}
...