Regex для определения всех неправильных специальных символов HTML - PullRequest
0 голосов
/ 14 мая 2018

У меня есть огромный HTML с несколькими специальными символами в формах   или "�.

Некоторые из них не правы, потому что им не хватает начального & .

Я бы хотел найти такие неправильные пространственные символы . Я знаю, что могу искать все нужные специальные символы с помощью следующего регулярного выражения:

       \&(?:[a-z]+|#x?\d+);\

Но мне понадобится регулярное выражение, полезное для поиска неправильных (без начального &). Вы можете мне помочь? Заранее спасибо

Edit:

Как и предполагалось, я выложу пример. Мой HTML содержит следующее утверждение:

   <![CDATA[<nolink>blablabla&nbsp;blablabla</nolink>]]>quot;

где у нас есть 2 специальных символа HTML:

  • &nbsp;
  • quot;

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

Таким образом, вывод запрошенного регулярного выражения должен быть: quot;

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Я пытался: \s(?!&)[A-Za-z0-9]+;

Пробовал в Regex101 с

&wudhilweuh212313i9dioed;  wcihecrehc; &wkjdnwkne13131; eiou2ei; 1121i2093;
qeoidjwidw29i1291; 

соответствием

wcihecrehc; eiou2ei; 1121i2093;
qeoidjwidw29i1291;

Мои примеры - просто случайность,Зачем?Насколько я понял, вы хотели что-либо, имеющее строку, состоящую из A-Z, a-z и 0-9, которая начинается с символа пробела, а не & и заканчивается ;.Поэтому я не хотел делать это слишком ограниченным.

0 голосов
/ 15 мая 2018

Вы можете построить

(?<!&)(?:\b(?:nbsp|quot|divide)|#[0-9a-f]+);

, добавив нужные вам "специальные символы".

Этот простой соответствует последовательности, которой не предшествует & (отрицательный взгляд позади (?<!&) удостоверяется в этом), то есть либо

  • nbsp
  • quot
  • шестнадцатеричное число с префиксом # (#[0-9a-f]+)

(Добавьте флаг без учета регистра, чтобы шестнадцатеричные символы могли быть прописными.)

См. Здесь на regex101 .

Редактировать
Добавлена ​​проверка на разрыв слова (\b) перед «словом сущностей», чтобы убедиться, что он не соответствует частичным сущностям (если они есть).

Редактировать 2
Чтобы иметь универсальный повтор, соответствующий всем сущностям (и, возможно, другим словам, не относящимся к сущности), попробуйте

(?<!&)(?:\b(?:[a-z]{2,8}\d{0,2})|#[0-9a-f]+);

Здесь в regex101 .

...