Я хочу принять произвольное регулярное выражение от пользователя и закрепить его с обеих сторон для обеспечения полного соответствия (^<user's-regex>$
), однако я не знаю, должен ли я принимать во внимание тот факт, что пользовательвозможно, уже закрепил свое регулярное выражение.
Похоже, что Perl, C ++, .NET и JavaScript все позволяют double множественное закрепление.
"hello" =~ /^h/ # true
"hello" =~ /^^h/ # true
"hello" =~ /^^^h/ # true
"hello" =~ /e/ # true
"hello" =~ /^e/ # false
"hello" =~ /^^e/ # false
Кто-нибудь знает, задано ли это для работы таким образом?Могу ли я зависеть от этого поведения или это случайность, которая может измениться в будущем?
Редактировать: Причина, по которой нам это нужно, заключается в том, что мы используем регулярное выражение VBScript(из COM), мы используем match
, однако это возвращает все совпадения, поэтому гораздо медленнее сопоставлять строку abc
с .*a.*
, чем с ^.*a.*$
.Используя привязку, предложенную @ Tim , мы увеличиваем скорость совпадения (для длинных струн) более чем в 12 раз.