Что нового

[RegExp] Получение имени и аргументов функции

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Имеется строка вида:
Код:
/function_1 (arg1,arg2,arg3,argN)
    ^/w    ^/040*

По поводу части (arg1,arg2,arg3,argN).
Эта часть может выглядеть и так () - аргументов нет.
Содержание аргументов может быть любым(за исключением \v и ,).
На выходе должен быть массив вида:
Код:
[function_1,arg1,arg2,arg3,argN]


На мой взгляд начало выражения:
Код:
StringRegExp($Text,'^\\(\w+)\040*\(' & ? & '\)$', 3)


И немного поясню ситуацию:
Каждый аргумент будет отправляться в Execute, а затем использоваться в самом скрипте.

Заранее спасибо.
P.S. Читал где то на просторах форума про вариант рекурсивного чтения, но не могу найти(если это вообще было)
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
#include 'array.au3'
$file='function_1 (arg1,arg2,arg3,argN)'
$str=StringSplit(StringReplace(StringRegExpReplace($file,'\s*\(',','),')',''),',')
_ArrayDisplay($str)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
firex,
А если так?
Код:
#include <Array.au3>

$sText = '/function_1 (arg1,arg2,arg3,argN)' & @CRLF & _
		'   ^/w    ^/040*'

$aText = StringRegExp($sText, '(?<=/|\(|,)(\w{2,}?)(?=\h|\,|\))', 3)
If @error Then
	ConsoleWrite('Error' & @LF)
Else
	_ArrayDisplay($aText)
EndIf
 
Автор
firex

firex

AutoIT Гуру
Сообщения
943
Репутация
208
madmasles
Сразу не обратил внимания.
Текст, что я скинул - идет в одну строку, ниже это описание некоторых моментов в ней.
И вот с такой строкой ваш пример не работает:
Код:
'/function_1 ('''','''','''','''')'
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
firex [?]
Текст, что я скинул - идет в одну строку, ниже это описание некоторых моментов в ней.
И вот с такой строкой ваш пример не работает:
Код:
#include <Array.au3>

$sText = '/function_1 ('''','''','''','''')'

$aText = StringRegExp($sText, '(?<=/|\(|,)(.+?)(?=\h|\,|\))', 3)
If @error Then
    ConsoleWrite('Error' & @LF)
Else
    _ArrayDisplay($aText)
EndIf
 
Верх