PHP Preg匹配错误

3
http://gskinner.com/RegExr/中,以下正则表达式有效,但在PHP中无效。
(?>AB/HDR)(?:[^])*?(?=AB/HDR|RUN DATE|\z)

在PHP中,它的意思是:

preg_match() [function.preg-match]: Unknown modifier '(' in E:\xampp\htdocs.....

我尝试了以下几种变化,但没有结果

%(?>AB/HDR)(?:[^])*?(?=AB/HDR|RUN DATE|\z)% 
> result : Compilation failed: missing terminating ] for character class at offset 41

%(?>AB/HDR)(?:\[^])*?(?=AB/HDR|RUN DATE|\z)%
> result : 0 match which is incorrect

任何帮助都将不胜感激!!!

测试数据

RUN DATE: 15FEB12                        F E D E R A L    E X P R E S S     C O R P O R A T I O N             PAGE:    1
RUN TIME: 09:36                               INTERNATIONAL DETAIL MANIFEST                             REPORT: FEVIP093-R1
SEQUENCE: DN,ST,BT,BA,MB,BD,DV,RT,AWB         OUTBOUND REQUEST BY ROUTE                                   



AB/HDR : 4876  6218  1850  ORIG: SYD     DEST: DAC     ORIGIN CNTRY: AU   EXPORT CNTRY: AU   SHIP DATE: 14FEB12
    CONSIGNEE ACCT : 000000000   PHONE : +88 02 8834304        SHIPPER ACCT : 141639668   PHONE : 0299978166
       COMPANY: EASY FLY EXPRESS LTD                              COMPANY: INTERNATIONAL AIR PARTS
       NAME:    ADYET                                             NAME:    GREG FULLER
       ADDRESS: HOUSE NO.4, 5TH FLOOR, ROAD NO.20                 ADDRESS: 5A JUBILEE AVENUE
       ADDRESS: UTTARA, SECTOR-3                                  ADDRESS:
       CITY:    DHAKA                                             CITY:    WARRIEWOOD
       ST/PV:      CNTRY: BD   POSTAL: 1230                       ST/PV:      CNTRY: AU   POSTAL: 2102
       BROKER:                    PHONE:                     CITY:                    CNTRY:      CUSTOMS ID NBR:
    SVC: 0101 BILL-T/C: S BILL-D/T: S   TTL PKGS:     1   TTL WGT:       0.5 K   CURR: USD   CUSTOMS VALUE:        90.00
MAWB:                DESC: AIRCRAFT PARTS, 1 X FILTER

AB/HDR : 4926  0503  9651  ORIG: SYM     DEST: DAC     ORIGIN CNTRY: CN   EXPORT CNTRY: CN   SHIP DATE: 14FEB12           ECI
    CONSIGNEE ACCT : 000000000   PHONE : 880-27701506-9        SHIPPER ACCT : 354519100   PHONE : 26501338-8004
       COMPANY: HOP LUN BANGLADESH                                COMPANY: FINELINE(4403137628)
       NAME:    MR. EMRAN                                         NAME:    MISS WU
       ADDRESS: BLDG NO. 3 (4 STORIED BLDG)                       ADDRESS: 3F BLDG D,  HUICHAO INDUSTRIAL PAR
       ADDRESS: DHAKA EXPORT PROCESSING ZONE                      ADDRESS: SECOND GUSHU ROAD XIXIANG TOWN,
       CITY:    GANAKBARI SAVAR DHAK                              CITY:    BAOAN DIST SHENZHEN
       ST/PV:      CNTRY: BD   POSTAL: 1349                       ST/PV:      CNTRY: CN   POSTAL: 518102
       BROKER:                    PHONE:                     CITY:                    CNTRY:      CUSTOMS ID NBR:
    SVC: 0101 BILL-T/C: O BILL-D/T: C   TTL PKGS:     2   TTL WGT:       7.7 K   CURR: USD   CUSTOMS VALUE:       346.50
MAWB:                DESC: PRICE TICKET L(4821100000)NO BRAND

   CRN:  492605039662


RUN DATE: 15FEB12                        F E D E R A L    E X P R E S S     C O R P O R A T I O N             PAGE:   11
RUN TIME: 09:36                               INTERNATIONAL DETAIL MANIFEST                             REPORT: FEVIP093-R1
SEQUENCE: DN,ST,BT,BA,MB,BD,DV,RT,AWB         OUTBOUND REQUEST BY ROUTE  

它应该做什么?顺便说一下,(?:[^])是不允许的。 - Ja͢ck
你在运行它的数据是什么? - Jeroen
@Jack 我需要将它拆分成 AB/HDR 到 AB/HDR 或运行日期。 - farness
我不是100%确定,但看起来RegExr使用PCRE类型的正则表达式(例如Java使用的类型),而PHP使用POSIX类型的正则表达式。[这可能会对你有所帮助。](http://phpmyanmar.com/phpcodes/manual/reference.pcre.pattern.posix.php) - Jeroen
@Jeroen 我认为更应该是相反的方式;-) 至少OP提到他正在使用preg_match - Ja͢ck
1个回答

1

首先,这是不允许的。

[^]

我已经将那个替换为。其次,您需要模式分隔符:

#(?>AB/HDR)(?:.)*?(?=AB/HDR|RUN DATE|\z)#

忘记了 点匹配全部 修饰符:

#(?>AB/HDR)(?:.)*?(?=AB/HDR|RUN DATE|\Z)#s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接