2017-03-31 70 views
0

我想用一個正則表達式匹配兩個不同的子模式,並使用PCRE_INFO_JCHANGED修改給他們相同的名稱(?J)preg_match_all:分配同名兩個子模式

兩個子模式有很大的不同彼此,所以我必須抓住他們使用|

我最常做的就是給這兩個模式的不同的名稱,然後選擇一個我想用PHP,但我想知道是否有可能不PHP

這裏的例子:https://3v4l.org/GEMeT編輯編輯感謝@JustOnUnderMillions

第二屆?P<number>將隨時捕捉並取代第一?P<number>

我想要什麼:使用相同的密鑰number

拍攝模式都與一個正則表達式,並存儲它們都
Desired output : 

Pattern 1 
string(1) "1" 

Pattern 2 
string(1) "2" 

感謝您的幫助!

+0

請您通過提供一些簡單的輸入澄清你的問題和他們的預期產出?據我所知,'preg_match_all('/ \ d + /',$ input,$ out)'或'preg_split('/ [^ \ d] + /',$ input,null,PREG_SPLIT_NO_EMPTY)'會做工作。讓我們繼續解決您的問題,以便將來的SO讀者可以從您的問題中受益。 – mickmackusa

回答

0

不要preg_match_all這裏

$regex = '/(?J)I wanna match pattern (?P<number>1) which is very different from pattern 2|(?P<number>2), again nothing to do with pattern 1 here/'; 

結果使用帶有preg_match

array(3) { 
[0]=> 
string(62) "I wanna match pattern 1 which is very different from pattern 2" 
["number"]=> 
string(1) "1" 
[1]=> 
string(1) "1" 
} 

完全固定的正則表達式'nothing similar' was not found in the orignal regex

$text1 = 'I wanna match pattern 1 which is very different from pattern 2'; 
$text2 = 'I wanna match pattern 2, again nothing similar with pattern 1 here'; 
$regex = '/(?J)(I wanna match pattern (?P<number>1) which is very different from pattern 2|I wanna match pattern (?P<number>2), again nothing similar with pattern 1 here)/'; 

echo "Pattern 1\n"; 
preg_match($regex, $text1, $matches); 
var_dump($matches); 

echo "\n\nPattern 2\n"; 
preg_match($regex, $text2, $matches); 
var_dump($matches); 
+0

這是否意味着它根本無法使用preg_match_all?我真正的用例需要preg_match_all。也感謝修復,我編輯了我的問題 – Alfred