PHP регулярное выражение помогает найти несколько имен файлов только не полный URL - PullRequest
1 голос
/ 06 апреля 2010

Я пытаюсь исправить регулярное выражение, которое я использовал в php, он находит все имена файлов в предложении / абзаце. Имена файлов всегда выглядят так:

/ this-a-valid-page.php

Из справки, которую я получил в SOF, мой старый шаблон был изменен на этот, что позволяет избежать полных URL, что является проблемой, с которой я столкнулся, но этот шаблон находит только одно вхождение в начале строки, ничего внутри строки.

/^\/(.*?).php/ 


У меня есть живой пример: http://vzio.com/upload/reg_pattern.php

Ответы [ 3 ]

2 голосов
/ 06 апреля 2010

Последняя точка в вашем выражении все еще может вызвать проблемы, так как она будет соответствовать «один что угодно». Например, вы можете сопоставить / somefilename # php с этим шаблоном. Сделайте обратную косую черту, чтобы сделать ее буквальным периодом:

/\/(.*?)\.php/

Также обратите внимание, что ?, чтобы сделать .* не жадным , необходимо, и паттерн Арды Си не будет работать. .* будет гоняться до конца строки, а затем будет резервировать по одному символу за раз, пока он не совпадет с .php, что, безусловно, не то, что вам нужно.

2 голосов
/ 06 апреля 2010

Удалите ^ - карат означает начало строки / строки, поэтому он не соответствует нигде в другом месте.

Если вам нужно избежать полных URL-адресов, вы можете изменить ^ на что-то вроде (?:^|\s), которое будет соответствовать либо началу строки, либо символу пробела - просто не забудьте удалить пробел с начала матч позже.

0 голосов
/ 06 апреля 2010

Чтобы найти все вхождения, вам нужно удалить начальный якорь и использовать функцию preg_match_all вместо preg_match:

if(preg_match_all('/\/(.*?)\.php/',$input,$matches)) {
 var_dump($matches[1]); // will print all filenames (after / and before .php)
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...