2016-12-30 1 views
1

私は、文字列の特定の部分を抽出してユニークな配列を返すことができるようにします。ここに私の文字列は次のとおりです。PHP preg_match multiple occurences、ユニークな配列を返します

preg_match_all()

$pattern = "/**(.*?)**/"; 
preg_match_all($pattern, $string, $matches); 

を使用して

$string = " 
    <div> some text goes here... **css/method|1|2**</div> 
    <div>**php/method|3|4**</div> 
    <div>**html|method|6|9** and more text here</div> 
    <div>**html/method|2|5**</div> 
"; 

私は、文字列からすべての部品を抽出することができますが、私はさらに一歩進んで、唯一以下を返す必要があります。

CSSを、php、htmlです。

最終配列は次のようになります。

$result = array("css", "php", "html"); 

をだから、基本的に、私は、この場合、重複した値「HTML」を排除するだけでなく、バ​​ックスラッシュまたはパイプの前にそれぞれの値を抽出する必要があります。私はメソッドの部分だけでなく、後に何を気にしない。

+0

と一致更新正規表現パターンからタグを無視する '*'正規表現で特別な意味を持っている、あなたはそれらをエスケープする必要があります。 – Barmar

答えて

1

preg_match_allarray_unique関数を使用して溶液:

preg_match_all("~\*\*([^/|*]+)(?=[/|])~", $string, $matches); 
$result = array_unique($matches[1]); 
print_r($result); 

出力:

Array 
(
    [0] => css 
    [1] => php 
    [2] => html 
) 

(?=[/|]) - 文字のいずれかが続く単語に一致する正の先読みアサーション/|


更新:以下~\*\*([^/|*<>]+)(?=[/|])~

+0

ええ、そうです。私は自分の投稿を削除しますが、私は(?= [/ |])あなたが投稿したことを理解していません。 –

+0

@RomanPerekhrest、ありがとう、これは素晴らしいですが、何らかの理由で私はコード内に追加のhtmlやテキストがあれば動作しません。例えば、 "Lorem ipsum ** css/method | 1 | 2 ** dolores ..." – Alko

+1

@KrisRoofe、いくつかの説明を追加しました – RomanPerekhrest

関連する問題