2016-09-24 2 views
0

Как исключить preg_split передняя косая черта, сопровождаемая строкой, заключенной в одинарной кавычки?Как исключить preg_split переднюю косую черту, за которой следует строка, заключенная в одинарную цитату

Я был поражен этой проблемой совсем некоторыми.

Ниже приведен код, за которым следует выход.

$str = "storeid='1,2',categoryname = 'the ultimate \'operating room'"; 

$match = preg_split("/('[^'\\\\]*')/U", $str, null, PREG_SPLIT_DELIM_CAPTURE); 

print_r($match); 

ВЫВОДА

Array ([0] => storeid= [1] => '1,2' [2] => ,categoryname = 'the ultimate \ [3] => 'operating room' [4] =>) 

Но вот мой Ожидаемый результат, я хочу, чтобы исключить \».

Надеюсь, что кто-то поймет и поможет мне здесь.

Array ([0] => storeid= [1] => '1,2' [2] => ,categoryname =[3] => 'the ultimate \'operating room' ) 

ответ

0

При захвате всего, заключенного в одинарные кавычки, вы также должны обратить внимание на одинарные кавычки escpaed. После этого регулярное выражение:

'[^'\\\\]*(?:\\\\.[^'\\\\]*)*' 
  • ' Одиночная кавычка (открытие)
  • [^'\\\\]* Все символы, кроме ' и \
  • (?:\\\\.[^'\\\\]*)* Match беглый характер, если существует, то же предыдущий образец как можно больше
  • ' Отдельная цитата (закрытие)

PHP:

$match = preg_split("/('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')/", 
    $str, 
    -1, 
    PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 

Выход:

Array 
(
    [0] => storeid= 
    [1] => '1,\'2' 
    [2] => ,categoryname = 
    [3] => 'the ultimate \'operating room' 
) 
+0

Если что картина будет порвать с любой ушедший символ (одинарные кавычки), который не является апостроф. Вы должны заменить '(?: \\\\ '[^' \\\\] *)' на '(? S: \\\\. [^ '\\\\\] *)' для обработки любых экранированных символы, включая символы новой строки. –

+0

Я считаю, что исходное регулярное выражение, которое я написал в ответ, в порядке. Я не уверен, о чем я думал, написав описания. Спасибо, в любом случае. @CasimiretHippolyte – revo

Смежные вопросы