PHP скрипт с регулярными выражениями - PullRequest
0 голосов
/ 14 октября 2010

Я пытаюсь получить текст между тегом заголовка, используя следующий скрипт php:

$search_string= < h1 >testing here< /h1 >;

$text = preg_match('<%TAG%[^>]*>(.*?)</%TAG%>',$search_string, $matches);

echo $matches[0]; 

Когда я пытаюсь запустить этот скрипт, значение не возвращается. Вместо этого есть предупреждающее сообщение: Предупреждение: preg_match () [function.preg-match]: неизвестный модификатор '(' в C: \ xampp \ htdocs \ check_for_files.php в строке 10

Может кто-нибудь помочь с этим, пожалуйста?

Ответы [ 3 ]

2 голосов
/ 14 октября 2010

Предупреждение: вы не заключили свое регулярное выражение в разделители.Поэтому попробуйте

$text = preg_match('#<%TAG%[^>]*>(.*?)</%TAG%>#',$search_string, $matches);

Понимание предупреждения.

Рассмотрите свое регулярное выражение:

'<%TAG%[^>]*>(.*?)</%TAG%>'
 ^          ^
start      end 

Поскольку вы явно не ставите регулярное выражение междуdelimiter, PHP считает, что вы используете < и > в качестве разделителя, так как < - первый символ в регулярном выражении.Следовательно, когда он видит неотбегший <, он принимает это как конец паттерна.Далее у нас может быть несколько модификаторов после закрывающего разделителя, которые позволяют нам изменять поведение сопоставления с образцом.Некоторые общие модификаторы:

  • i для нечувствительного к регистру
  • m для многострочного соответствия

Теперь в вашем случае есть ( после закрывающего разделителя, который не является допустимым модификатором, отсюда и предупреждение.

2 голосов
/ 14 октября 2010

Ваше выражение нуждается в разделители . / является наиболее распространенным, но # должно работать в этой ситуации.

$text = preg_match('#<%TAG%[^>]*>(.*?)</%TAG%>#',$search_string, $matches);
1 голос
/ 14 октября 2010

/^<[^>]+>(.*)<\/[^>]+>$/ должен сделать трюк.

...