Рег. выражения, помогите плиз

xargon

Новичок
Рег. выражения, помогите плиз

Собственно нужно написать регулярное выражение на php, которое будет преобразовывать в тексте все
вхождения вида

#### # ###-## на ####-#-###-##

т.е., например:

6417 1 850-00 будет преобразовываться в 6417-1-850-00.

З.Ы. это артикулы оборудования в html файлах.. я пишу поисковик, и мне нужно искать в тексте по этим артикулам.. когда цифры разделяются пробелами, поиск не получается, т.к. одинаковые слова (цифры) убивает индексатор. А с дефисами они будут оставаться в неизменном виде.

З.Ы.Ы. Было бы конечно здорово иметь возможность "выдрать" все артикулы из текста в массивчик.. но пока хотя бы так..
 

xargon

Новичок
я ниразу не прикасался к регулярным выражениям, и незнаю что написать в preg_replace.
По видимому что-то простое..:)
 

SandreS

Новичок
Господа, возник такой вопрос:
На вход поступает произвольная строка, в которой может находится например URL или е-майл. Задача, найтить все вхождения, и преобразовать в строку с соответствующими тегами. Так вот, когда поступает имы хоста или маил, все в порядке, при добавлении к имени хоста конкретной страницы, или другого файла, тоже. А вот как только получаем нечто вроде http://host.my/index.php?var, тут аут. Регулярка написана правильно, и вхождение находится. Но preg_replace не меняет уже ничего. И как показали исследовани, дело именно в ? после имени файла. И что еще более непонятно, если раскомментировать строку после preg_match_all в которой нет ? (это после эксперементов выяснилось), то вхождение будет заменено на то, что нужно. Т.е. теги добавятся, иначе просто текст выводит. Полагаю, что экранирование ? должно быть простым, но идеи иссякли. А то, что удалось найти по поиску, работает разве что, при замене всей строки, на первое вхождение. Т.е. теряется сам текст кроме ссылки., а комментариев например к ней уже нет.

$n_msg = "некий текст http://myhost.host2.ru/dir/main.php?var&var2=1 некий текст? http://host2.ru/dir/index.php?var3=2 текст.";
preg_match_all("/(http:\W\W[^www.])+\w[-._\w]*\.\w{2,3}([\/\.\w]*[^ \.])*/", $n_msg, $result);
print_r($result);
//$n_msg = "некий текст http://myhost.host2.ru/dir/main.phpvar&var2=1 некий текст? http://host2.ru/dir/index.phpvar3=2 текст.";
for ($l=0; $l< count($result[0]); $l++) {
$n_msg = preg_replace ("'$result[0][$l]'", "<a class=link target=_blank href=".$result[0][$l].">".$result[0][$l]."</a>", $n_msg);
}
echo $n_msg;

------
$n_msg = preg_replace ("'\?'", "l-q", $n_msg);
$n_msg = preg_replace ("'l-q'", "?", $n_msg);
------
Ууупс... :-/ Решение оказалось еще проще, чем ожидал. Наверно заработался слишком. Прошу прощения за беспокойство.

Однако... Решение задачи оказалось совсем не верным изначально. При двух и более одинаковых вхождениях, приводит к полному краху. :-(
 

kos

Новичок
Гравицапа
забыл надо погнать 2 раза, а по другому вроде никак
 
Сверху