Что нового

[RegExp] Выделение аргументов функции

vcomp71

Осваивающий
Сообщения
431
Репутация
25
Есть строка вида
Код:
Func _filter($htm,$Section, $name,$tip)
Из нее видно, что это заголовок фукции.
Надо выделить из нее массив аргументов функции вида
$htm
$Section
$name
$tip
Написал
Код:
[\(|\,].*?[\)|\,]
Однако такое выражение выделяет из строки
$htm
$name

То есть я так понимаю, что если символ запятой вошел в однин фрагмент, он из лругого вычитается. Потом что вот такой фрагмент
Код:
[\,].*?[\,]
Дает вот такой результат
$Section

Как бы так составить, чтобы все комбинации получить?
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Код:
#include <Array.au3>
$s = 'Func _filter($htm,$Section, $name,$tip)'
$p = '(\$[^,)\s]+)'
$a = StringRegExp($s, $p, 3)
_ArrayDisplay($a)

Расшифровка шаблона:
"\$" - группа с захватом начинается с знака "доллар"
"[^,)\s]+" - любое количество символов, не совпадающих с "запятой", "закрывающей скобкой" и с "пробелом" (на всякий случай), минимум 1 символ
 

axlwor

Скриптер
Сообщения
657
Репутация
147
А если усложнить? :scratch:
Код:
$s = 'Func _filter($htm="sd0",$Section=5, $name,$tip='')'
 
Автор
vcomp71

vcomp71

Осваивающий
Сообщения
431
Репутация
25
А если еще усложнить
Код:
$s = 'Func _filter(ByRef $base, $htm="sd0",$Section=5, $name,$tip='')'
 

axlwor

Скриптер
Сообщения
657
Репутация
147
автор ты. тебе решать, что нужно :D
 
Автор
vcomp71

vcomp71

Осваивающий
Сообщения
431
Репутация
25
Ну так поэтому в первом примере в регулярном выражении отсутствовал знак $ :laugh:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Переменная поддерживает определённый набор символов, это латинские буквы, цифры и нижний дефис. Соответственно строим шаблон:

Код:
#include <Array.au3>

$sLine = 'Func _filter(ByRef $base, $htm="sd0",$Section=5, $name,$tip='')'

$sPattern = '[ ,(](\$\w+)'
$aRet = StringRegExp($sLine, $sPattern, 3)

_ArrayDisplay($aRet)
 
Верх