Какова наилучшая практика для выбора контента между парой разделителей с использованием регулярного выражения, исключая разделители в PHP и JS ?
aassssd [dddd] fff ffff (delimiter=[..]) output -> dddd aassssd QddddQ fff ffff (delimiter=Q) output -> dddd aassssd RddddQ fff ffff (delimiters=R...Q) output -> dddd aassssd "dddd" fff ffff (delimiter=") output -> dddd
Концерн об исключении разделителей, выбор цели относительно прост:
/\"[^"]\"/ //for line four
Предпочтительно, чтобы решение возвращало масштабирующее устройство. Идеальный ответ использует только RegEx, который можно протестировать в http://regexpal.com/
Я бы использовал не жадные .*?
который фиксирует все до конечного разделителя:
$str = 'aassssd QddddQ fff ffff'; preg_match_all('/[Q](.*?)[Q]/', $str, $out, PREG_PATTERN_ORDER); var_dump($out);
производит:
Array ( [0] => Array ( [0] => QddddQ ) [1] => Array ( [0] => dddd ) )
Вам нужно будет сбежать с [
и ]
разделителями: /[\[](.*?)[\]]/
Это использует единую группу захвата (.*?)
Поэтому нужный вам результат находится в позиции 1 в выходном массиве.
aassssd [dddd] fff ffff (delimiter=[..]) output -> dddd
RegEx для PHP:
(?<=\[).*?(?=\])
RegEx для JS (также работает на PHP):
[^\[]*?(?=\])