2013-06-04 7 views
-1

Не могу понять, почему мое регулярное выражение обнаруживает не только альфа-символы?Строка Regexp содержит также специальные символы

Узор:

([\<])([^\>]{1,})([a-zA-Z])([\>]) 

Пример

-------- Original Message -------- 
Subject: This is plain test 
Date: Tue, 04 Jun 2013 13:26:04 +0000 
From: Hello there <[email protected]> 
To:  [email protected] <[email protected]> 

Hello! This is plain mail! 
<[email protected]></[email protected]> 
No html is inserted. No no! 
<man2></man2> 
Why do you found this < something inside this>??? 

Экспрессия нашли адреса электронной почты и недействительных HTML-теги! Мне нужно, поэтому никакие недопустимые теги и адрес электронной почты не будут сопоставлены из-за разбора текста для действительных тегов html. Что не так с этим patter и почему это соответствует недопустимым тегам и сообщениям электронной почты?

Вот ссылка для моих тестов. http://regexr.com?353v9

+2

Вы должны сказать нам, что вы хотите, чтобы соответствовать и что не так с тем, что она соответствует теперь, если вы хотите лучше помочь на как исправить ваш шаблон. – iamnotmaynard

ответ

1

Это просто один должен соответствовать вашим потребностям:

</?[a-zA-Z0-9]+?> 

Demo

+0

Спасибо всем. Многие из ваших ответов хороши! –

0

Ваша вторая группа ([^\>]{1,}) находит один или несколько символов, которые не закрывающие угловые скобки > - это включает в себя буквы, цифры, и, ну, все, что это не >. Я считаю, что именно поэтому ваши матчи не то, что вы ожидаете; это трудно понять, так как вы не сказали, что именно вы пытаетесь сопоставить, какие строки соответствует шаблону или что не так в матчах.

0

Если я правильно понял ваш вопрос, вы хотите отфильтровать такие вещи, как < > @ /?

Если это случай, вы можете использовать ^[^\<\>\/\\\'\"]*$ для соответствия все кроме < >/\ ' ".

0

Давайте разберем ваше регулярное выражение (группы):

  1. ([\<]) = ровно один <
  2. ([^\>]{1,}) = любой символ, не>, один или несколько раз
  3. ([a-zA-Z]) = точно один строчный или прописной буквенный символ
  4. ([\>]) = Ровно один >

Вот почему адреса электронной почты, как <[email protected]> сопоставляются:

  1. <
  2. [email protected]
  3. d
  4. >

И тегов, как строки, как <[email protected]>:

  1. <
  2. [email protected]
  3. N
  4. >

или < something inside this>:

  1. <
  2. something inside thi (включая пространство в начале)
  3. s
  4. >

<man2> не совпадает, потому что число 2 до > не является альфа-символов.

Basic Решение: Чтобы соответствовать типичные HTML-теги, вы можете использовать ([\<]\/?)([a-zA-Z0-9]+)([\>])

  1. ([\<]\/?) = один < или </ (для закрытия тегов)
  2. ([a-zA-Z0-9]+) = один или несколько алфавитно-цифровых символов (для поддержки <h2> и т.д.) символов - имя HTML элемент
  3. ([\>]) = один >

Примечание. Это не поддерживает нотацию XHTML пустой метки, например <br /> или <br/>, а также теги с атрибутами, такими как <a href="http://example.com">.Есть много регулярных выражений ресурсов, там с кучей шаблонов для HTML-тегов, проверки адреса электронной почты и т.д.

Edit: Если вы делаете какой-либо фильтрации, убедитесь, что не только раздеть > символы, как это обычно используется в текстовых сообщениях электронной почты, чтобы указывать кавычки при ответе.

Смежные вопросы