Что не так с моим регулярным выражением - PullRequest
1 голос
/ 17 марта 2010

Да, я знаю, что обычно плохая идея разбирать HTML с помощью RegEx, но кроме этого кто-то может объяснить ошибку здесь:

 string outputString = Regex.Replace(inputString, @"<?(?i:script|embed|object|frameset|frame|iframe|metalink|style|html|img|layer|ilayer|meta|applet)(.|\n)*?>", "");
if (outputString != inputString)
{
   Console.WriteLine("unwanted tags detected");
}

Конечно, он обнаруживает предполагаемые теги, такие как: <script> и <html>, но также отклоняет строки, которые я хочу разрешить, такие как <B>Description</B> а также <A href="http://www.mylink.com/index.html">A Link containing 'HTML'</A>

Ответы [ 4 ]

2 голосов
/ 17 марта 2010

Я думаю, что проблема в первом вопросительном знаке в

<?(?i:script

Возможно, вы хотите сопоставить начальный символ "/" в закрывающем HTML-теге, верно? Я думаю, что вопросительный знак делает «<» необязательным (ноль или одно совпадение). </p>

Я предлагаю использовать

<(/)?(?i:script

но я не эксперт по RegEx ...

1 голос
/ 17 марта 2010

Из того, что я вижу, просто нужно слегка подтолкнуть:

Изменение с

"<?(?i:script|...|applet)(.|\n)*?>"

до

"\<(?i:script|...|applet)(.|\n)*?\>"

Поскольку символы < и > являются специальными

1 голос
/ 17 марта 2010

Я не уверен, как вы это делаете в C #, но, похоже, вы забыли сделать регистр нечувствительным к регистру.

0 голосов
/ 17 марта 2010

я бы поменял

"<?(?i:script|...|meta|applet)(.|\n)*?>"

до

"</?(?:script|...|meta|applet)[^>]*>"

Я не совсем знаком со строками регулярных выражений Javascript, но у меня есть ссылка, и я знаком с основами регулярных выражений (и время от времени мне нужен освежающий напиток).

\ s совершенно необязательно - не нужно. Вы можете сохранить его, если хотите. обратите внимание, что это НЕ обрабатывает заглавные теги. вам придется обращаться с ними как с дополнительными случаями.

вам может потребоваться экранировать / в строке. тебе не нужен? после * потому что * означает 0 для многих, так что охватывает необязательно.

Я не уверен, но я не думаю, что жадный * настигнет (?:).

http://www.regular -expressions.info / quickstart.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...