2017-03-22 15 views
0

私が持っているこの文字列正規表現での結果を作成する方法

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)に表示されますか?

私はの最初のキーワードとして「YOUR」は「(YOUR | MY)」入れてみましたが、それでも結果は、アレイ0

にポップアップ表示させるに失敗が

+1

結果は、彼らが文字列に表示されている順序で常にある、正規表現には何もこれを変更しません。 – Barmar

+1

@WiktorStribiżew彼は、元の文字列の順序にかかわらず、常に「あなた」であることを望んでいると思う。 'array_reverse()'は、入力文字列が他の順序であった場合、間違ったことを行います。 – Barmar

答えて

2
事前にありがとう

preg_match_all()を使用すると、正規表現の順序ではなく、文字列に一致する順序で結果が表示されます。

最初に特定の一致が必要な場合は、異なる正規表現を使用して2つの別々の呼び出しを行う必要があります。最初に/(YOUR)(.*)(END(?:LINEWORD))/を検索し、次に/(MY)(.*)(END(?:LINEWORD))/を検索します。

usort()で結果配列を並べ替えると、YOURの要素がMYの要素よりも先に並べ替えられます。

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 
) 
関連する問題