2014-12-14 1 views
0

Здравствуйте У меня есть функция апи, которая в основном текст в моей базе данныхрегулярные выражения массив несколько Скобок

здесь функции я использую

alpha(integer link, integer face, float alpha); 
color(integer link, integer face, vector color, float alpha); 
description(integer link, string description); 
glow(integer link, integer face, glow); 
name(integer link, string name) 
position(integer link, vector position) 
rotation(integer link, vector rotation) 
texture(integer link, integer face, string texture_uuid, vector repeats, vector offsets, float rotation_in_radians) 

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

([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}) 

, который работает отлично подходит для этого одной Фиэля d, но поскольку у меня есть другие поля, я не уверен, что я не уверен, как запускать многократно повторяющееся регулярное выражение

также ссылка и лицо также могут быть отрицательными значениями, когда я использовал (< [^>] *> | \ W +), которая работает в определенной степени, но не все функции API

любая идея, как я могу построить регулярное выражение для работы на всех типах функций API, как мне нужно их в массиве, как этот

array(
[0] = function, 
[1] = link 
[2] = face 
[3] = texture uuid 
[4] = texture repeats 
[5] = offset 
[6] = rotation 
) 

это например, используя функцию текстуры. Надеюсь, я объяснил это достаточно, так как мне здесь трудно найти и искать помощь

здесь пример, который я использовал

https://regex101.com/r/vO2gW1/3, как вы видите его сломаны не подобрать UUID

или есть способ с регулярным выражением или другой способ, чтобы выполнить их как функция даже и держать там структуру, функции для возврата данных в формате мне это нужно для использования PHP

+0

Основываясь на вашей последней попытке, просто включите любой дополнительный символ, с которым вы можете столкнуться во второй части вашего чередования ... [DEMO] (https://regex101.com/r/vO2gW1/4) – Enissay

ответ

0

вы можете попробовать

^[^(]+(?=\()|(?<=[(,])\s*\K(?:<.*?>|.*?)(?=[,)]) 

Он должен забрать все, что вам нужно. Demo.

Что он делает, так это совпадение между началом строки, запятыми и круглыми скобками. Поэтому он не будет работать с такими вещами, как anim(foo()).

+0

спасибо, что кажется много лучше, чем я пытаюсь выяснить – user3153523

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