#php #wildcard
#php #подстановочный знак
Вопрос:
У меня есть 2 подстановочных карты
- «PersonalBlue M.*Mat»
- «PersonalBlue M.* Copay.*Mat»
и оба шаблона совпадают со строкой «PersonalBlue M14P $ 3500 / 80%; Доплата 35 долларов за 4 посещения; 50% Rx без мата»
<?php
eregi('PersonalBlue M.*Mat', 'PersonalBlue M14P $3,500/80%; $35 Copay 4 Visits; 50% Rx w/Mat', $matches);
eregi('PersonalBlue M.*Copay.*Mat', 'PersonalBlue M14P $3,500/80%; $35 Copay 4 Visits; 50% Rx w/Mat', $matches2);
echo "<br>";
echo strlen ($matches[0]);
echo "<br>";
echo strlen ($matches2[0]);
?>
Длина совпадающей строки одинакова для обоих. Мне нужно, чтобы первая подстановочная карта совпадала со строкой «PersonalBlue M09P $ 2,500 / 80%; 50% Rx без мата», но не с «PersonalBlue M14P $ 3,500 / 80%; Доплата 35 долларов за 4 посещения; 50% Rx без мата».
Какая будет подходящая первая подстановочная карта?
Комментарии:
1. eregi O_O разве они там не спамят много УСТАРЕВШЕГО? XD
2. @yes123: Только если у вас нет сломанной среды разработки.
Ответ №1:
Если я правильно понимаю, вы хотите 'PersonalBlue M14P $3,500/80%; $35 Copay 4 Visits; 50% Rx w/Mat'
только сопоставлять 'PersonalBlue M.*Copay.*Mat'
, а не сопоставлять что-то вроде 'PersonalBlue M.*Mat'
.
Если 'PersonalBlue M.*Mat'
изменить на 'PersonalBlue M.*(^Copay).*Mat'
, это не будет соответствовать, если Copay находится между PersonalBlue M
и Mat
.
<?php
eregi('PersonalBlue M.*(^Copay).*Mat', 'PersonalBlue M14P $3,500/80%; $35 Copay 4 Visits; 50% Rx w/Mat', $matches);
eregi('PersonalBlue M.*Copay.*Mat', 'PersonalBlue M14P $3,500/80%; $35 Copay 4 Visits; 50% Rx w/Mat', $matches2);
echo "<br>";
echo strlen ($matches[0]); // outputs 0
echo "<br>";
echo strlen ($matches2[0]); // outputs 62
?>
Как указал @yes123, eregi
устарел, и вместо этого вы можете захотеть посмотреть на preg_match.
Комментарии:
1. я использую этот шаблон. ‘PersonalBlue M.* (^ Доплата).*Mat’ не совпадает со строкой ‘PersonalBlue M14P $ 3500 / 80%; Доплата 35 долларов за 4 посещения; 50% Rx без мата’ и ‘PersonalBlue M09P $ 2500 / 80%; 50% Rx без мата’ тоже. я хочу, чтобы этот шаблон совпадал с ‘PersonalBlue M09P $ 2,500 / 80%; 50% Rx без мата’
2. Да, вы абсолютно правы. Извините, я неправильно прочитал вопрос и в основном отклонился от вашего примера кода. Однако мне не так повезло с ответом на вторую часть. Вопрос, однако, ваша целевая строка всегда разделяется точкой с запятой, не могли бы вы сделать разделение или вам нужно использовать регулярное выражение?