Он предназначен для соответствия уравнениям, аналогичным выражениям, для захвата ключа и значений отдельно. Представьте, что у вас есть заявление вроде height="30px"
, и вы хотите записать имя атрибута height
, а также его значение 30px
.
У вас есть m|/([^=]+)="(.+)"|
.
Ключ должен быть всем, перед тем как встретится =
. Итак, [^=]
захватывает его. ^
является метасимволом отрицания при использовании в качестве первого символа внутри скобок []
. Это означает, что он будет соответствовать любому символу, кроме =
, который вы хотите. /
, вероятно, является ошибкой, если вам нужно захватить группу, вы не должны ее использовать, или если она действительно предназначена, это означает, что буквально соответствует открывающим круглым скобкам. Поскольку это особый символ, его нужно избегать, поэтому \(
. если вы хотите захватить группу, это должно быть ([^=]+)
.
Далее идет знак =
, который вас не волнует. Затем кавычки, которые содержат значение. Таким образом, вы фиксируете его как "(.+)"
. .+
пойдет на совпадение каждого героя, включая финальный "
. Но тогда он найдет, что он не может соответствовать финальному "
в регулярном выражении, поэтому он будет возвращаться назад, отказываться от последнего "
захваченного регулярного выражения (.+)
, чтобы оставить строку внутри кавычек, которые будут записаны в группе. Теперь вы готовы получить ключ и значение через $1
и $2
. Круто, не так ли?
Ваша интерпретация '[^ =]' ложна. Скобки в регулярном выражении запускают класс отдельных символов для соответствия, а '^' в начале отрицает его. В другом месте внутри скобок он ведет себя буквально (и многие другие персонажи теряют свое особое значение внутри скобок). Без скобок '^ =' будет соответствовать знаку равенства в начале строки. – Benoit
[Объясните это регулярное выражение для меня] (http://blog.nu42.com/2010/09/explain-this-regex-to-me.html): Используйте [YAPE :: Regex :: Explain] (http://search.cpan.org/perldoc/YAPE::Regex::Explain). –