2014-09-20 37 views
1

我正在試圖將所有匹配的單詞重複放入括號中。獲取括號內的所有單詞及其偏移量

$text = '{yes yes no yes} yes {yes no}'; 

所需的輸出爲詞 「是」:

Array 
(
    [1] => Array 
     (
      [0] => Array 
       (
        [0] => yes 
        [1] => 1 
       ) 
     ) 

    [1] => Array 
     (
      [0] => Array 
        (
        [0] => yes 
        [1] => 5 
       ) 
     ) 

    [2] => Array 
     (
      [0] => Array 
        (
        [0] => yes 
        [1] => 12 
       ) 
     ) 

    [3] => Array 
     (
      [0] => Array 
        (
        [0] => yes 
        [1] => 22 
       ) 
     ) 
) 

我試過以下的正則表達式,但它在最新的位置返回只有兩個字:

preg_match_all("#\{[^}]*(yes)[^{]*\}#", $text, $matches, PREG_OFFSET_CAPTURE); 

我已經嘗試了許多其他解決方案,但沒有任何成效任何想法?

回答

0

你可以試試下面的正則表達式,它使用正向前查找匹配所有這是目前的{}字符串裏面yes

<?php 
$string = "{yes yes no yes} yes {yes no}"; 
preg_match_all("#yes(?=[^{}]*})#", $string, $matches, PREG_OFFSET_CAPTURE); 
echo print_r($matches); 
?> 

輸出:

Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [0] => yes 
        [1] => 1 
       ) 

      [1] => Array 
       (
        [0] => yes 
        [1] => 5 
       ) 

      [2] => Array 
       (
        [0] => yes 
        [1] => 12 
       ) 

      [3] => Array 
       (
        [0] => yes 
        [1] => 22 
       ) 

     ) 

) 
+0

它的工作原理!謝謝,你救了我! – Jeremie 2014-09-20 12:10:22

+0

不客氣:-) – 2014-09-20 13:30:34

0

您可以創建一個正則表達式來匹配到結尾},然後執行另一個正則表達式。

<?php 

$string = "{yes yes no yes} yes"; 

$matches = array(); 
preg_match_all("/yes[^}]*/", $string, $matches); 

echo print_r($matches, true); 

$final_matches = array(); 
preg_match_all("/yes/", "{".$matches[0][0], $final_matches, PREG_OFFSET_CAPTURE); 
echo print_r($final_matches, true); 

https://eval.in/196020

最終輸出:

Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [0] => yes 
        [1] => 1 
       ) 

      [1] => Array 
       (
        [0] => yes 
        [1] => 5 
       ) 

      [2] => Array 
       (
        [0] => yes 
        [1] => 12 
       ) 

     ) 

) 
+0

我已經試過了。它不起作用。偏移是錯誤的。 – Jeremie 2014-09-20 10:33:47

+0

修復了「hack」的更新答案。 – 2014-09-20 10:35:11

+0

謝謝,但它只適用於只有一個支架。我的文章中有很多括號。我已經相應地更新了這個問題。 – Jeremie 2014-09-20 10:39:08