2015-11-01 2 views
0

Я использую php, и мне нужно разбить строку (xpath) на регулярное выражение. Мне нужно только одно регулярное выражение для разделения на следующие «входы». Я надеюсь, что кто-то может мне помочь.Разделить xpath с регулярным выражением


Входной сигнал: /путь/к/узел/испытание

Выход:

$result = array(
    "path", 
    "to", 
    "node", 
    "test", 
); 

Входной сигнал: /путь/к [суб = "string" AND sub2 = "string2"]/node/test

Выход:

$result = array(
    'path', 
    'to[sub="string" AND sub2="string2"]', 
    'node', 
    'test', 
); 

Входной сигнал: /путь/к [суб/путь/к = "строка"]/узел/испытание

Выход:

$result = array(
    'path', 
    'to[sub/path/to="string"]', 
    'node', 
    'test', 
); 

Спасибо, прежде!

С наилучшими пожеланиями Sascha

+0

try my edit ans –

ответ

-1

Просто использовать explode

$str = explode('/',yourString) 

Или если у вас есть внутренний / onnly внутри [], который вы хотите игнорировать, вы можете попробовать следующее регулярное выражение:

preg_match_all("/\[(?:[^\[\]]|(?R))+\]|[^\[\]\/]+/", $input, $matches); 

Пример:

$input = '/path/to[sub/path/to="string"]/node/test'; 
preg_match_all("/\[(?:[^\[\]]|(?R))+\]|[^\[\]\/]+/", $input, $matches); 
var_dump($input); 
var_dump($matches); //this will give you expected output 

Объяснение:

Мы захватывая 2 типа здесь:

  1. /\[(?:[^\[\]]|(?R))+\] соответствует чему-либо в квадратных скобках рекурсивно
  2. [^\[\]\/]+ спичек любой символ последовательности не состоящий из []
+1

Нет, это не сработает w флигель. http://melpon.org/wandbox/permlink/MiCPLRelWfEOmuEy – MikeCAT

+0

@MikeCAT попробуйте альтернативное регулярное выражение –

+0

С новым регулярным выражением '' to '' и '" [sub/path/to = "string"] "' разделены, но в этом случае они не являются. http://melpon.org/wandbox/permlink/JEQfPQEKgJfzLhHt – MikeCAT

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