2011-01-24 2 views
0

У меня есть следующие PHP регулярное выражениеPHP регулярное выражение многострочный

preg_match('/[\/\/\*] First: (.*)\n[\/\/\*] Second: (.*)\n/i', $some_string) 

, но по какой-то причине он не будет соответствовать этот текст:

// First: a string 
// Second: another string 

Я попытался изменения окончаний строк между Windows и стилем Unix, это ничего не делало. Я также попытался разделить регулярное выражение для соответствия First и Second отдельно; это сработало, но когда я поставил их вместе, они больше не соответствуют образцу текста. Кажется, что-то связано с пространством после второго [\/\/\*] .. любые идеи?

Примечание: я не могу изменить регулярное выражение; это клиентский код, который меня отменил, потому что он не предоставляет документацию. Этот код ищет определенный шаблон в файлах PHP, чтобы загрузить их как «плагины» в свой продукт. На самом деле я пытаюсь угадать, какой заголовок мне нужно добавить в эти файлы PHP, чтобы они были правильно распознаны как плагины.

ответ

2

Try:

preg_match('~// First: (.*)\n// Second: (.*)~i', $str); 

See it

Почему ваше регулярное выражение не так?

[\/\/\*] - класс символов, который либо соответствует /, либо *.

Но у вас, кажется, есть // в начале строки, поэтому вы будете никогда получить соответствие.

Какая строка будет соответствовать текущему регулярному выражению?

Измените текущий вход, чтобы иметь / в начале и символ новой строки после второй строки:

$some_string = 
'/ First: a string 
/Second: another string 
'; 

See it

+0

Я не могу изменить само регулярное выражение, это код клиента, который я не могу изменить. Я должен на самом деле придумать заголовок для php-плагина, который будет загружать клиентский код на основе этого правила регулярных выражений .... :( – Trust

+0

@Trust: ваше регулярное выражение ** просто неверно **. Вы ничего не можете сделать без его изменения – zerkms

+0

Это помогло мне получить мой ответ, спасибо. – Trust

2
$some_string = <<<STR 
// First: a string 
// Second: another string 

STR; 

$match = preg_match('`// First: (.*)\n// Second: (.*)\n`i', $some_string); 

echo $match; 

Просто проверили это, она работает. Вы уверены, что после второй линии произошел рубеж?

+0

Благодарим за помощь. – Trust

0

(Отправлено от имени ОП).

Ответ:

Я пытался угадать, что шаблон это будет соответствовать. Это в конечном итоге было следующим:

/* 
* First: a string 
* Second: another string 
*/ 
Смежные вопросы