2017-02-05 2 views
-1
struct mbuh 
(

lineshg = 0, 
tres = "text", 

    fn track all:#() = 
     (
     local c -- clone 
      local lpoint = [0,0,0] -- previous point created 
      local ccoll = #() -- array for created objects 
      local prev = [0,0] -- var for alt distance changing 
     ), 

    fn listzfun trs:123 x:#() = 
     (
     obj = snapshotasmesh a 
      min_vz = max_vz = in coordsys world (getvert obj 1).z 
      min_vx = max_vx = in coordsys world (getvert obj 1).x 
      min_vy = max_vy = in coordsys world (getvert obj 1).y 
     ) 
) 

fn brung man: = 
(

) 

как приведенном выше примере, я хочу, чтобы найти слово «структура хх» & «п ххх», но только «п ххх», что внутри структуры сфера не вне его [ «п brung хого»], я использую это регулярное выражение, чтобы найти егоКак найти функцию внутри структуры

^.*?(\bstruct\s*\w+\b)|^.?(\bfn\b+[\w\s:#()""]*) 

но поиск всех п слова внутри и снаружи сферу структуры, поэтому вопрос в том, как я могу найти слово fn xxx, что только внутри области структуры, которая приведена в примере выше [fn track xxx и fn listzfun xxx]?

спасибо.

+2

Я думаю, что [regex is _not_ подходит для синтаксического анализа исходного кода] (http://stackoverflow.com/a/19639012/107625). Вы должны использовать лексер (http://parsingintro.sourceforge.net/#contents_item_5). –

+1

Хотя это можно сделать с помощью Regex, такие вещи, как балансировка скобок/скобок, очень сложно сделать только с одним Regex. Я бы порекомендовал сделать еще одну форму синтаксического разбора, если ничего другого. – Abion47

+0

Но трудно ли это сделать? как дополнительная информация, каждая «fn» внутри структуры разделяется комой, а «fn» вне нее не разделяется комой. спасибо –

ответ

0

Вы можете попробовать его, как так с этим регулярным выражением:

(struct\s*\w+.*?(?=fn))(fn.*?(?=\),)\)).*?(?=fn)(fn.*?\))(?=\R\)) 

Демо: https://regex101.com/r/zGAt4D/9

+0

Спасибо, я пытаюсь его развить. Но/R дайте мне ошибку в C# 4 tho. он сказал, что «не поддерживает \ R, чтобы соответствовать разрыву строки Unicode». Спасибо –

+0

@fajarvashra Я понятия не имею о 'C#'. Не забудьте включить флаг Single line. i.e '.' должно соответствовать всем, включая новую строку. – MYGz

+0

Я использую преобразование regex в C# regex, но он не показывает никакого результата [code] @ "struct \ s * \ w +. *? (? = Fn) (fn. *? (? = \),) \ .?)) * (= п) (п * \)) (= (> \ г \ п |.?? [\ п \ v \ е \ г \ x85 \ u2028 \ u2029]) \))» [/ code] –

0

я получил то же уравнение, так же, как MYGz делает, но его в C#

@"\bstruct\s*\w+\s 
\(
(?> 
[^()]+ 
| 
\((?<Depth>) 
| 
\)(?<-Depth>) 
)* 
(?(Depth)(?!)) 
\) 
" 

Надеюсь, что это поможет кому-то еще в будущем.

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