(?<=())(\w|\d|\n|[().,\-:;@#$%^&*\[\]"'+–/\/®°⁰!?{}|`~]| )+?(?=(
))
В основном, что он делает:
(?<=(
Выбор должен быть добавлен с тегом ))
(\w|\d|\n|[().,\-:;@#$%^&*\[\]"'+–/\/®°⁰!?{}|~]| )
Это просто регулярное выражение, которое я хочу применить. В этом случае он выбирает символ буквы или цифры или символ новой строки или некоторые специальные символы, перечисленные в примере в квадратных скобках. Символ трубы |
просто означает «ИЛИ».
+?
Плюс символьные состояния для выбора одного или нескольких из вышеуказанного порядка не имеют значения. Вопросительный знак изменяет поведение по умолчанию от «жадного» до «неровного».
(?=())
Выбор должен быть добавлен тегом
В зависимости от вашего варианта использования вам может потребоваться добавить некоторые модификаторы, такие как (i или m)
Здесь я выполнил этот поиск в Sublime Text, поэтому мне не пришлось использовать модификаторы в моем регулярном выражении.
Вышеприведенный пример должен отлично работать с такими языками, как PHP, Perl, Java ... Javascript, однако, не поддерживает lookbehind, поэтому мы должны забыть об использовании (?<=(
и искать какое-то обходное решение. Возможно, просто нарисуйте первые четыре символа из нашего результата для каждого выбора, например, здесь Текст, соответствующий регулярному выражению между тегами ))
Также посмотрите на JAVASCRIPT REGEX DOCUMENTATION для не захватывающие круглые скобки
eval "require $ENV{a}";
" use
" не работает хорошо здесь, потому что это только импортирует в контексте eval
.
, Поскольку @Manni сказал, на самом деле, лучше использовать, требуют. Заключение в кавычки от man perlfunc
:
If EXPR is a bareword, the require assumes a ".pm" extension and replaces "::" with "/" in the filename for you, to make it easy to load standard modules. This form of loading of modules does not risk altering your namespace. In other words, if you try this: require Foo::Bar; # a splendid bareword The require function will actually look for the "Foo/Bar.pm" file in the directories specified in the @INC array. But if you try this: $class = 'Foo::Bar'; require $class; # $class is not a bareword #or require "Foo::Bar"; # not a bareword because of the "" The require function will look for the "Foo::Bar" file in the @INC array and will complain about not finding "Foo::Bar" there. In this case you can do: eval "require $class";
Операторы "использования" выполняются во время компиляции, не во время выполнения. Необходимо будет потребовать модулей вместо этого:
my $module = "Foo::Bar";
eval "require $module";
Я использовал бы UNIVERSAL:: потребуйте . Это имеет и , требуют и использование методы использовать пакет. использование метод будет также звонить импорт для пакета.
use UNIVERSAL::require;
$ENV{a}->use or die 'Could not import package: ' . $@;
Вы, вероятно, хотите использовать require
вместо use
, если Вы не хотите, чтобы это произошло во время компиляции и затем вручную, импортируете символы, Вам, возможно, понадобилось бы. См. эта ссылка на Поваренную книгу Perl (от Google Books) для хорошего обсуждения методов, которые можно использовать для достижения того, что Вы хотите.
Я думаю, что модулем, загруженным во времени выполнения, может быть Плагин. У меня есть этот вид проблемы, имея определенные модули к некоторым случаям, которые загружаются во время выполнения как плагины с Модуль:: Сменный .
, Возможно, необходимо изменить логику модулей, но она работает, и масштабируйтесь очень хорошо (мое приложение, запущенное с четырех модулей, и теперь имейте двадцать, и это растет).