2017-03-31 72 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