Что именно вы хотите, чтобы соответствовать?Это звуки, которые вы хотите, чтобы соответствовать:
- слово (тэг)
- обязательным пробельные
- слово (атр название)
- необязательные пробелы
=
- необязательные пробелы
- либо одинарные кавычки или двойного котирования (значение attr)
Это было бы: ^(\w+)\s+(\w+)\s*=\s*(?:'([^']*)'|"([^"]*)")
Это позволит матчи, как:
a href=''
- пустой атр
a href='Hello world'
- пробелы и другие символы, не слово в кавычках части
a href="one 'n two"
- котировки различного вида в котируемой части
a href = 'google'
- пространства с обеих сторон =
и запретить такие вещи, как это, что ваш оригинальный регулярное выражение позволяет:
a b c href='google'
- дополнительные слова
='google'
- только пространства на левом
href='google'
- только Attr на левом
Он по-прежнему звучит не совсем правильно - вы пытаетесь сопоставить тег с одним атрибутом?
С помощью этого регулярного выражения, имя тега будет в $1
, атр имя в $2
и значение атр в любом $3
или $4
(другой ноль - большинство языков различают группы не принято с нуля против группы принято, но пустой с ""
если Вы нуждаетесь в этом).
Regexp, который обеспечивал бы атр значение приобретает в той же группе будет грязнее, если вы хотите, чтобы одиночные кавычки в двукратно цитируемом значении атра и наоборот - что-то вроде ^(\w+)\s+(\w+)\s*=\s*(['"])((?:(?!\3).)*)\3
((?!)
нулевой ширины отрицательного взгляда вперед - (?:(?!\3).)
средства что-то вроде [^\3]
, за исключением последнего не поддерживается).
Если вы не заботитесь об этом, то ^(\w+)\s+(\w+)\s*=\s*(['"])(['"]*)\3
будет делать только штраф (для обоих $3
будет тип котировки, а $4
значение attr).
Кстати, re (["'])\w+?\1
выше - \w
не соответствует котировкам, поэтому этот ?
ничего не изменит.
Сказав все это, использовать реальный HTML анализатор ;-)
Эти регэкспы будут работать в Perl и Ruby.Другие языки обычно копируют систему регулярных выражений Perl, но часто вводят незначительные изменения, поэтому могут потребоваться некоторые корректировки. Особенно тот, у кого есть негативный прогноз, может быть неподдерживаемым.
Я видел, как \ 1 используется в javascript, но не на другом языке, особенно в php. Можно ли использовать на другом языке такие php? – slier
Да. Это часть регулярного выражения. – katrielalex
Да, на PHP это работает. – Wrikken