我有这个字符串
MY NAME IS SALADIN ENDLINE
YOUR NAME IS JOANNE ENDWORD
并使用此正则表达式
/(YOUR|MY)(.*)(ENDLINE|ENDWORD)/isU
将匹配
[0] = array(
0 => MY NAME IS SALADIN ENDLINE
1 => MY
2 => NAME IS SALADIN
3 => ENDLINE
)
[1] = array(
0 => YOUR NAME IS JOANNE ENDWORD
1 => YOUR
2 => NAME IS JOANNE
3 => ENDWORD
)
然后如何使 NAME IS JOANE 的结果出现在第一场比赛中(在阵列0上)?
我试图将“你的”作为“(你的|我的)中的第一个关键字,但仍未能使结果弹出到数组0
提前谢谢
答案 0 :(得分:2)
使用preg_match_all()
时,结果的顺序是在字符串中找到匹配项,而不是正则表达式中的顺序。
如果您想先进行特定匹配,则需要使用不同的正则表达式进行两次单独的调用。首先搜索/(YOUR)(.*)(END(?:LINEWORD))/
,然后搜索/(MY)(.*)(END(?:LINEWORD))/
。
或者您只需使用usort()
对结果数组进行排序,以便YOUR
的元素位于MY
的元素之前。
答案 1 :(得分:1)
使用PHP,您可以使用preg_match_all()中的标志(PREG_PATTERN_ORDER和PREG_SET_ORDER)来对结果数组进行排序。由于前者是默认的,你似乎使用不同的编程语言,或者你使用了后者。
preg_match_all($图案,$主题,$匹配,PREG_PATTERN_ORDER):
[0] = array(
0 => MY NAME IS SALADIN ENDLINE
1 => YOUR NAME IS JOANNE ENDWORD
)
[1] => array(
0 => MY
1 => YOUR
)
[2] => array(
0 => NAME IS SALADIN
1 => NAME IS JOANNE
)
[3] => array(
0 => ENDLINE
1 => ENDWORD
)