[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярное выражение
walters
Всем привет, долго искал но не нашел ответа, либо я его не понял.

Помогите пожалуйста разобраться.

есть шаблон поиска и сама строка.

изначально я вывожу из строки данные в скобках соответственно ид(12)

ниже сверяю есть ли совпадение результата шаблона с самой строкой.

но по какой то причине он по идее должен выдать что нет совпадений так как у нас в строке нет данных с ид (12) (12[1,2,3])

а скрипт выдает что есть совпадения. но как видите в строке нет данных с таким ид.

после того как вывел на экран $matches[0] понял что он выдает данные последнему результату по моему шаблону, если я искал 12[4,6] и он не нашел он выдает последний результат те 11[4,6].

$pattern ='/[12]{2}\[(.*?)\]/';    // Шаблон поиска в формате ид[список ид]

preg_match($pattern,"9[3],10[2],11[4,6]", $matches);

if(strpos("9[3],10[2],11[4,6]", "$matches[0]") !== false){
echo 'Есть совпадения';
}
else{
echo 'Нет совпадений';
}
Игорь_Vasinsky
покажи исходную строку и что ты в ней хочешь найти.
нихера не понятно.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
walters


$pattern ="/[12]{2}\[(.*?)\]/"; // Шаблон поиска в формате ид[список ид]

$string = "9[3],10[2],11[4,6]"; // Строка


preg_match($pattern, $string, $matches);

echo $matches[0] выдаст 11[4,6], хотя $pattern ищет 12[*]



Guest
Можете кто то подправить или рассказать в чем проблема ?
twin
Всё, что в квадратных скобках - это перечень. Если там [12]{2}, то это совсем не обязательно 12. Может и 11 и 22 и 21 быть.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
walters
а как будет правильно ?

мне например из строки нужно отобрать 12[1,2,3]

и именно с цифрой 12, ибо это у меня переменная цифра может менятся,

и если результат нету что бы выводило хотя бы false
netruxa
не надо 12 заключать в скобки
вот так будет искать норм:

$pattern ="/12\[(.*?)\]/";


_____________
ввв.парсер.рф - онлайн система проверки позиций Вашего сайта в поисковиках. Для форумчан 100 рублей на счет.
walters
Спасибо netruxa,twin
Guest
Все отлично работает но есть одна неувязочка, прошу вашего совета


$pattern ="/10\[(.*?)\]/"; // Шаблон поиска в формате ид[список ид]

$string = "9[3],10[2],11[4,6]"; // Строка


preg_match($pattern, $string, $matches);


if(isset($matches[0]))
{
echo $matches[0]; // выдаст 10[2]
}


а если в $pattern поменять число с 10 на 0 выдаст тот же результат, посоветуйте как с этим боротся
walters
то есть можно как то в шаблоне
$pattern ="/10\[(.*?)\]/";  


как то сказать что до 10 может быть либо ',' либо 'ничего'.

twin
Цитата (walters @ 17.05.2016 - 12:06)
как то сказать что до 10 может быть либо ',' либо 'ничего'.

Так и сказать. smile.gif
,*

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
walters

$pattern ="/,*0\[(.*?)\]/";


Все ровно результат от 10-тки 0[2]
twin
Конечно не будет работать. Потому что запятая тут вообще не при делах. Нужно смотреть, есть ли слева цифра. Ну вот так примерно:
$pattern ="/(?<!\d)0\[(.*?)\]/";


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
walters
Спасибо !
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.