Макросом не выцепить символ "/"
Добавлено: Пн июн 18, 2007 6:01 pm
На офе жалуются, что не выцепить никак символ "/", как только в шаблон впихиваешь этот символ (автомакрос вызываем условием "console /\//"), то кора ругается что-то типо:
а вот на счёт красного у меня и вопрос, вот это похоже шаблон, который обрабатывается в условиях автомакроса:
^[\/"](.*?)[\/"](\w?)
^ - начало строки
[\/"] - символ / или " (ну это понятно)
. - один произвольный символ
* - повторяется 0 или большее число раз
(.* - любое число любых символов)
? - повторяется 1 или 0 раз
(*? - станет 0 и более)
вот у меня такой вопрос (для тех кто знает regexp):
нафига в тут нужен символ "?", если и так получается любое число любых символов?
Интуитивно, я удалил его, получилось так: ^[\/"](.*)[\/"](\w?)
(Ну почти интуитивно, на самом деле у меня есть конструктор)
После этого всё прекрасно заработало.
Так вот вопрос не сильно ли этот "?" повлияет на работу всего плагина, дествительно ли он лишний?
Тема на офе обсуждается тут
ЗЫ: кстати точто также не выдирался знак ".
вот кусок файла plugins\macro\Utilities.pm:OpenKore version 1.9.3
@ai_seq =
Loaded plugins:
plugins/alertsound.pl (alertsound)
plugins/doCommand.pl (doCommand)
plugins/macro.pl (macro)
Trailing \ in regex m/\/ at plugins/Macro/Utilities.pm line 116.
at plugins/Macro/Utilities.pm line 116
Macro::Utilities::match('Map loaded', '/\//') called at plugins/Macro/Automacro.pm line 343
Macro::Automacro::checkConsole('/\//', 'ARRAY(0x3389c58)') called at plugins/Macro/Automacro.pm line 435
Macro::Automacro::automacroCheck('log', 'ARRAY (0x3389c58)') called at plugins/Macro/Automacro.pm line 358
Macro::Automacro::consoleCheckWrapper('message', 'connection', 0, 1, 'Map loaded\x{a}', 'undef', 'main::parseSendMsg', 'main::mainLoop') called at H:/Game/Ragnarok/src/Log.pm line 252
Log::processMsg('message', 'Map loaded\x{a}', 'connection', 'undef', 1, 'HASH(0x11fd038)', 'HASH(0x11fd158)') called at H:/Game/Ragnarok/src/Log.pm line 274
Log::message('Map loaded\x{a}', 'connection') called at H:/Game/Ragnarok/src/functions.pl line 591
main::parseSendMsg('}\x{0}\x{89}\x{0}79d08d1\ x{e2}\x{ba}\x{db}\x{1}M\x{1}O\x{1}\x{0}\x{0}\x{0}\x{0}O\x{ 1}\x{0}\x{0}\x{0}\x{0}O\x{1}\x{1}\x{0}\x{0}\x{0}' ) called at H:/Game/Ragnarok/src/functions.pl line 231
main::mainLoop() called at H:/Game/Ragnarok/src/ Interface.pm line 79
Interface::mainLoop('Interface::Console::Win32=HASH (0x125d558)') called at openkore.pl line 359
main::__start() called at start.pl line 127
Died at this line:
if ($match == 0 && $text eq $kw) {return 1}
* if ($match == 1 && ($text =~ /$kw/ || ($flag eq 'i' && $text =~ /$kw/i))) {
no strict;
жирным выделена та самая 116 строкаsub match {
$cvs->debug("match (@_)", $logfac{function_call_auto});
my ($text, $kw) = @_;
unless (defined $text && defined $kw) {
error "match: wrong # of args\n", "macro";
return 0
}
my $match;
my $flag;
if ($kw =~ /^".*"$/) {$match = 0}
elsif ($kw =~ /^\/.*\/\w?$/) {$match = 1}
else {return 0}
($kw, $flag) = $kw =~ /^[\/"](.*?)[\/"](\w?)/;
if ($match == 0 && $text eq $kw) {return 1}
if ($match == 1 && ($text =~ /$kw/ || ($flag eq 'i' && $text =~ /$kw/i))) {
no strict;
foreach my $idx (1..$#-) {setVar(".lastMatch".$idx, ${$idx})}
use strict;
return 1
}
return 0
}
а вот на счёт красного у меня и вопрос, вот это похоже шаблон, который обрабатывается в условиях автомакроса:
^[\/"](.*?)[\/"](\w?)
^ - начало строки
[\/"] - символ / или " (ну это понятно)
. - один произвольный символ
* - повторяется 0 или большее число раз
(.* - любое число любых символов)
? - повторяется 1 или 0 раз
(*? - станет 0 и более)
вот у меня такой вопрос (для тех кто знает regexp):
нафига в тут нужен символ "?", если и так получается любое число любых символов?
Интуитивно, я удалил его, получилось так: ^[\/"](.*)[\/"](\w?)
(Ну почти интуитивно, на самом деле у меня есть конструктор)
После этого всё прекрасно заработало.
Так вот вопрос не сильно ли этот "?" повлияет на работу всего плагина, дествительно ли он лишний?
Тема на офе обсуждается тут
ЗЫ: кстати точто также не выдирался знак ".