Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите с preg_match_all
 
 автор: vzhik   (28.11.2008 в 13:11)   письмо автору
 
 

Есть код:

$text="We have received an order for product simply 
Reference Number     :23089238
Order Date           :10/22/2007 23:35
Plimus Product       :27360 - simply 
Plimus Contract      :1644316 - Full Version 
Number of licenses   :1 
CD on demand         :No
Total                :19.95 

Referrer             :http://www.sss.com/order/order_=m
Remote Address       :211.74.210.103
Country by ip address:Taiwan



custom1: BITRIX_SM.MjE3MTE0OS4xODE3NDkyLlRXLjQ0LlkuZW4=
Payment Type         :CC
User Data: 
Title                :
Last Name            :CHANG
First Name           :HsiuHao
Company              :
Address1             :No.5, Alley 2, Lane 461, Dingciang St., Sanmin District, Kaohsiung City 807, Taiwan (R.O.C.)
Address2             :
City                 :Kaohsiung City
State                :--
Zip Code             :807
Country              :tw (Taiwan) 
Email                :bananaguy@gmail.com
Work Phone           :886939335475
Work Phone Extension :
Mobile Phone         :
Fax Number           :
Home Phone           :
Plimus Account ID    :14934972

We supplied the following license code and sent it to the user:
14BEC3D2A41135461C5C52F9380A3C

Order information link: https://www.pnhrtsg.com/0F1

Best regards,
The Crach Team
http://www.crach.com";
$text = rtrim(ltrim(strtoupper($text))); 
$text = eregi_replace(' ', '', $text);
$text = eregi_replace("\\$", '', $text);
$n = preg_match_all("/^WEHAVERECEIVEDANORDERFORPRODUCT.*REFERENCENUMBER:.*ORDERDATE:.*PLIMUSPRODUCT:.*PLIMUSCONTRACT:.*NUMBEROFLICENSES:.*CDONDEMAND:.*TOTAL:.*REFERRER:.*REMOTEADDRESS:.*COUNTRYBYIPADDRESS:.*CUSTOM1:.*PAYMENTTYPE:.*USERDATA:.*TITLE:.*LASTNAME:.*FIRSTNAME:.*COMPANY:.*ADDRESS1:.*ADDRESS2:.*CITY:.*STATE:.*ZIPCODE:.*COUNTRY:.*EMAIL:.*WORKPHONE:.*WORKPHONEEXTENSION:.*MOBILEPHONE:.*FAXNUMBER:.*HOMEPHONE:.*PLIMUSACCOUNTID:.*WESUPPLIEDTHEFOLLOWINGLICENSE.*BESTREGARDS,.*THEPLIMUSTEAM.?HTTP:.??WWW.*COM/", $text, $matches, PREG_PATTERN_ORDER);
 


Помогите, пожалуйста, исправить регулярное выражение, чтобы $n=1. То есть мне нужно выяснить походит ли $text к шаблону с данными фразами в таком порядке.

  Ответить  
 
 автор: xx77   (28.11.2008 в 20:51)   письмо автору
 
   для: vzhik   (28.11.2008 в 13:11)
 

Для чего проверять начинается-ли текст с We have received an order for product ?

Может быть просто нужно определить присутствуют-ли и какие обязательные параметры
начинающиеся с начала строки и имеющие значения после двоеточия
, или всё перечисленное в выражении обязательно?

а так похоже что нехватает модификатора /s ,
т.к. все эти $text = eregi_replace(' ', '', $text);
, $text = eregi_replace("\\$", '', $text);
не удаляют переносов строк, и .* не совпадает,

  Ответить  
 
 автор: vzhik   (01.12.2008 в 12:30)   письмо автору
 
   для: xx77   (28.11.2008 в 20:51)
 

Вы правы - ^ в принципе ни к чему.

А далее: я этим выражением проверяю, удовлетворяет ли $text моему шаблону. Т.е. в $text должны встречаться эти фразы в указанном порядке, а что между ними не важно.

Я понимаю, что проблема именно в переносе строк в $text. Не подскажете, как их убрать или учесть в preg_match_all()?

  Ответить  
 
 автор: xx77   (01.12.2008 в 21:05)   письмо автору
 
   для: vzhik   (01.12.2008 в 12:30)
 

Совсем непонимаю зачем такое может понадобиться ,
если например должен быть какой-то обязательный параметр,
то он и должен быть строго например e-mail , а не e---mail или email,
взависимости от того как вздумалось программе или ещё чему-то вписать его.

с этим текстом многое может совпадать
например
<?
$b 
'\s*:';
$a '(?>[^\n]*\n)+?';
$c $b.$a// подстроки предшевствующие нужным параметрам 
//  которые начинаются с начала строки
// (включая ": " после пердыдущих параметров)
$s '\x20*'// пробелы которые почему-то не нужны,  
preg_match("
~^
${a}
REFERENCE
${s}NUMBER${c}
ORDER
${s}DATE${c}
PLIMUS
${s}PRODUCT${c}
PLIMUS
${s}CONTRACT${c}
NUMBER
${s}OF${s}LICENSES${c}
CD
${s}ON${s}DEMAND${c}
TOTAL
${c}
REFERRER
${c}
REMOTE
${s}ADDRESS${c}
COUNTRY
${s}BY${s}IP${s}ADDRESS${c}
CUSTOM1
${c}
PAYMENT
${s}TYPE${c}
USER
${s}DATA${c}
TITLE
${c}
LAST
${s}NAME${c}
FIRST
${s}NAME${c}
COMPANY
${c}
ADDRESS1
${c}
ADDRESS2
${c}
CITY
${c}
STATE
${c}
ZIP
${s}CODE${c}
COUNTRY
${c}
EMAIL
${c}
WORK
${s}PHONE${c}
WORK
${s}PHONE${s}EXTENSION${c}
MOBILE
${s}PHONE${c}
FAX
${s}NUMBER${c}
HOME
${s}PHONE${c}
PLIMUS
${s}ACCOUNT${s}ID${c}
WE
${s}SUPPLIED${s}THE${s}FOLLOWING${s}LICENSE${a}
BEST
${s}REGARDS${s},${a}
THE
${s}[A-Z]+${s}TEAM${a}
HTTP://(?:WWW\.)?[\-0-9A-Z]+\.COM$
~ix"
,
    
trim($text), $matches);
print_r($matches);
// добавил модификатор x только для читаемости
?>
, но мне этого не понять

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования