2016-07-01 7 views
0

Я пытаюсь извлечь слова из этой строки с PHP:Регулярные выражения чистые результаты

$string= '\'banana\', "orange", "apple"'; 

Используя эту модель:

/([\'"])(.*?)\1/ 

Но это дает мне эти результаты:

array(3) { 
    [0] array(3) { 
     [0] "'banana'" 
     [1] ""orange"" 
     [2] ""apple"" 
    } 
    [1] array(3) { 
     [0] "'" 
     [1] "" 
     [2] "" 
    } 
    [2] array(3) { 
     [0] "banana" 
     [1] "orange" 
     [2] "apple" 
    } 
} 

Является ли это способом, я могу убрать его до:

array(3) { 
    [0] "banana" 
    [1] "orange" 
    [2] "apple" 
} 

Благодарим за помощь.

ответ

1

С регулярным выражением вы можете просто извлекать слова с помощью совпадения \w. Положите его вместе с Global флагом, и я верю, что вы получите то, что вы хотите :)

См this example

+0

Это потрясающе! Это сработало. Он вернулся это: массива (1) { [0] массив (3) { [0] "банан" [1] "оранжевого" [2] "яблока" } } Можно ли только вернуться на один уровень? – Roy5

+0

Regex поражает на многих уровнях, если он используется для правильной вещи :) Я рекомендую вам занять 1 или 2 часа в свободное время, чтобы изучить его. Там много ресурсов, просто нужно выбрать свой любимый. – SWLim

+0

Btw, что вы подразумеваете под 'return one level'? Вы хотите, чтобы вы «бананы», «оранжевые», «яблочные», «чтобы вернуть« банановое апельсиновое яблоко »? Если это так, то то, что вы можете сделать, это просто «присоединиться» к массиву. – SWLim

0

Использование preg_split и описать все, что вы хотите удалить, и где вы хотите вырезать строку, то добавьте флаг PREG_SPLIT_NO_EMPTY для фильтрации пустых частей.

$subject = '\'banana\', "orange", "apple"'; 
$pattern = '~["\'](?:,\s*["\']|\z)|\A["\']~'; 

$result = preg_split($pattern, $subject, -1, PREG_SPLIT_NO_EMPTY); 

print_r($result); 

Очевидно, что этот способ не проверяет, если каждый элемент хорошо заключенным между тем же типом кавычки, но это действительно необходимо?