Подскажите, как реализовать такое

12
J
На сайте с 06.07.2011
Offline
169
#11
levchernenko:
jano, как-то так:
$array = glob("cars/*.html"); // в какой папке ищем
$s = array_search('машины', $array); // что ищем
if ($s) { echo $array[$s]; } //выводим результат, если нашло

Задача абсолютна другая. Если я заведомо буду знать что "машины" - то это можно сделать и без регулярных выражений.

Вместо "машины" может быть любое слово.

L
На сайте с 30.10.2015
Offline
34
#12

jano, ну ясен пень. слово машины, в моем примере, меняешь на то, которое нужно найти

...
J
На сайте с 06.07.2011
Offline
169
#13
levchernenko:
jano, ну ясен пень. слово машины, в моем примере, меняешь на то, которое нужно найти

Таких слов тысячи. Вот будет правильная строчка

Ищем: \<a title\="([^\"]+)\" href\="([^\"]+)\"\>([^\"]+)\<\/a\>
На что меняем: <a title="$1" href="$2.html">$3</a>',

Если кому пригодится. Огромное спасибо RiDDi

siv1987
На сайте с 02.04.2009
Offline
427
#14

F: (<a\s+title=".*?"\s+href=".*?)(?<!\.html)(")

R: $1.html$2

J
На сайте с 06.07.2011
Offline
169
#15

Почему-то такой код не работает:

Ищем: \<a class\="spin" href\="([^\"]+)\"\>([^\"]+)\<\/a\>

На что меняем: <a class="spin" href="$1.html">$2</a>',

Вроде всё делаю по аналогии. Подсказали бы где косяк.

RiDDi
На сайте с 06.06.2010
Offline
285
#16

jano, вы используете в третьей группе условие ^\" (все, кроме символа двойной кавычки), что без ленивого режима будет работать неправильно т.к. захавает всё до следующей кавычки

в вашей задаче то, что после href вообще не нужно, делайте просто

Ищем: class="spin" href="([^\"]+)"

На что меняем: class="spin" href="$1.html"

siv1987 вон привёл вообще универсальное решение учитывающее возможные множества пробельных символов, а так же проверяющее, что .html нет в href :)

(<a\s+title=".*?"\s+href=".*?)(?<!\.html)(")

Только я бы перед href все же использовал бы \s* т.к. в данном месте гепотетически может не быть пробела вообще.

В самом же href надо, наоборот, использовать .+ - нам же не нужны href=".html", не так ли?

Ну и, конечно, ленивый режим (.*?) будет работать в данном случаи в два раза медленнее жадного ([^\"]*) т.к. будет осуществляться две проверки (множество + остаток) на каждый символ вместо 1 проверки (только множество) на символ.

Более корректно будет примерно так

(<a\s+title="[^\"]*"\s*href="[^\"]+)(?<!\.html)(")

ну и от себя добавлю чутка что бы правильно обрабатывать page#comments и page?action=comments

(<a\s+title="[^\"]+"\s*href="[^\"\#\?]+)(?<!\.html)([\"\#\?])
Вебмастер отдыхает на бережках морей. Заработок в интернете - дело техники.
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий