Описание
Я думаю, что так, как я бы подойти к этому, чтобы соответствовать все плохое вместе со всем хорошо. Тогда в выражении только положите свое регулярное выражение. Позже в логике программирования я проверил каждое совпадение, чтобы увидеть, была ли заполнена группа захвата 1, если это так, то match.index покажет, где в строке, которая соответствует.
Это регулярное выражение будет:
- матч обычный текст URLs, тем самым предотвращая их от захвата в группе 1
- соответствует содержанию всех HTML тегов, тем самым предотвращая их от захвата в группе 1
- будет соответствовать желаемой
/
текста в квадратных скобках, как /match me/
в группу захвата 1
https?:\/\/[^\s]*|<\/?\w+\b(?=\s|>)(?:='[^']*'|="[^"]*"|=[^'"][^\s>]*|[^>])*>|(\/[^(\/|\<|\>)]*[^\/]*\/)
Пример
Образец текста
I am attempting to replace values in /slashes/ with italic tags. One problem is HTML: If I do <b>html</b> <b>tags</b> tags, it picks up the closures. Also, the mark up allows URLs to be placed into [http://www.google.com/s] square bracket tags, messing things up further. Now the tags are off balanced. What /do/ I do? I'd ideally like to have it skip searching [] and inside <> tags. Doing <b>/italic/</b> should be legal, however.
Матчи
[0] => Array
(
[0] => /slashes/
[1] => <b>
[2] => </b>
[3] => <b>
[4] => </b>
[5] => http://www.google.com/s]
[6] => /do/
[7] => <b>
[8] => /italic/
[9] => </b>
)
[1] => Array
(
[0] => /slashes/
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[6] => /do/
[7] =>
[8] => /italic/
[9] =>
)
Если вы хотите примириться с жизнью, выбрал другой Charac ter, который не всегда находится в тегах html. –
проблема [решена] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) – aaronman
Возможно, вы правы. Но у меня такая же проблема с другими тегами разметки, как * и _. Я хотел бы попробовать и решить это, даже если я изменил характер позже. – Anthony