在regex上创建第一个关键字首先出现在结果上

时间:2017-03-22 19:20:44

标签: php regex

我有这个字符串

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

提前谢谢

2 个答案:

答案 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
)