|
|
|
| Здравствуйте.
Необходимо в тексте распознать комбинацию [tab]nameTab[/tab].
Где nameTab - может быть произвольным (лат.симв и цифры).
nameTab является названием таблицы и именем файла в котором она хранится.
preg_match("/^[\s\w\d]*[^\s]?[tab]{3}[^\s]?([a-zA-Z0-9]+)[^\s]+[tab]{3}[^\s]?[\s\w\d]*$/",$text, $matches);
|
скорее всего что-то неправильно с условием поиска. Пробовал несколько таблиц подряд, без текста:
[tab]tab[/tab][tab]tab1[/tab][tab]tab2[/tab]
в $matches всего 2 значения
$matches[0] == //сама строка (текст);
$matches[1] == 'tab';
|
остальные таблицы не видит...
хорошо было всех их как-то опознать по условию и запихнуть в массив, чтобы было похоже на:
Array
(
tab => "html код из файла tab",
tab1 => "html код из файла tab1",
tab2 => "html код из файла tab2"
);
|
| |
|
|
|
|
|
|
|
для: Tinni
(02.02.2011 в 02:26)
| | У вас в регулярном выражении указано два раза [tab] и ни одного раза [/tab], кроме того квадратные кавычки являются спец-символом, если нужен символ квадратных кавычек их в регулярном выражении следует экранировать
| |
|
|
|
|
|
|
|
для: cheops
(02.02.2011 в 10:59)
| | Последовал Вашему совету, получилось:
preg_match("/[\[tab\]]{5}([a-zA-Z0-9]+)[\[\/tab\]]{6}/"
|
Но в тексте по прежнему находит только одну таблицу.
В чем моя ошибка, подскажите пожалуйста. | |
|
|
|
|
|
|
|
для: Tinni
(02.02.2011 в 17:25)
| | Хм... вообще-то функция preg_match() как раз и предназначена для поиска одного соответствия, если нужно найти несколько соответствий, то используется фукнция preg_match_all().
>preg_match("/[\[tab\]]{5}([a-zA-Z0-9]+)[\[\/tab\]]{6}/"
Напрасно, кстати, помещаете регулярное выражение в квадратные скобки, так как они всегда обозначают один символ. В вашем случае получается, что регулярное выражение не может найти подстроку длиной длинее или короче 6 символов. Уберите вообще фигурные скобки и неэкранированные квадратные (оставив только [a-zA-Z0-9]+), а для поиска всех соответствий используйте preg_match_all(). | |
|
|
|
|
|
|
|
для: cheops
(02.02.2011 в 17:37)
| | Уважаемый cheops, так задача же стоит найти текст именно между этой конструкцией:
[tab]NameTab1[/tab]
для поиска [tab], где [ -1й, t -2й, a -3й, b - 4й, ] - 5й символ:
именно поэтому использовал такую запись,
перечисляя все возможные символы (лат.симв., цифры и [ ])
А фигурные скобки {5} (я полагал, что обозначают минимальное кол-во подряд идущих символов удовлетворяющих условию) ... Хотя тут сомневаюсь в своей правоте, т.к. обычный текст скажем: abc23 - тоже ведь удовлетворяет условию поиска.
Что-то я запутался, если честно. Но спасибо за подсказку, обязательно попробую с preg_match_all()!
ps: если не затруднит, то все же как бы Вы решили данный вопрос (описанный выше)? | |
|
|
|
|
|
|
|
для: Tinni
(02.02.2011 в 19:00)
| | >ps: если не затруднит, то все же как бы Вы решили данный вопрос (описанный выше)?
Если я правильно понял, то что требуется, то как-то так
<?php
$text = 'скорее всего что-то неправильно с условием поиска.
Пробовал несколько таблиц подряд, без текста:
[tab]tab[/tab][tab]tab1[/tab][tab]tab2[/tab]
в $matches всего 2 значения';
$pattern = "|\[tab\](.*?)\[/tab\]|is";
preg_match_all($pattern, $text, $out);
unset($out[0]);
echo "<pre>";
print_r($out[1]);
echo "</pre>";
?>
|
| |
|
|
|