2009-11-15 7 views
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 
} 
+0

Не могли бы вы получить более подробную информацию об этом шаблоне, пожалуйста? – Gumbo

ответ

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

+0

Спасибо за объяснение. – Homework

+0

Добро пожаловать, Джо. –

+0

@Bart, это принимает тест: test: test, могу ли я ограничить его, чтобы принять только тест: тестовый тест: тест, а не тест: тест: тест: тест и т. Д.? – Homework

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

это соответствует "AA: BB CC: DD" или "AA: BB \ п CC: DD" и не на "AA: BB Foo CC: DD"

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 
} 
Смежные вопросы