正则表达式字符串也只有特殊的字符

时间:2013-06-04 14:21:37

标签: html regex validation

无法理解,为什么我的正则表达式不仅仅是alpha字符?

模式:

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

示例

-------- Original Message --------
Subject:    This is plain test
Date:   Tue, 04 Jun 2013 13:26:04 +0000
From:   Hello there <myemail@myemail.tld>
To:     myemail@myemail.tld <myemail@myemail.tld>

Hello! This is plain mail!
<SP@AN></SPA@N>
No html is inserted. No no!
<man2></man2>
Why do you found this < something inside this>???

Expression找到了电子邮件地址和无效的html标签! 我需要,因此,由于解析了html有效标签的文本,因此不会匹配无效标签和电子邮件地址。 这种模式有什么问题,为什么这与无效的标签和电子邮件相匹配?

这是我测试的链接。 http://regexr.com?353v9

4 个答案:

答案 0 :(得分:1)

这个简单的应该适合您的需求:

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

Demo

答案 1 :(得分:0)

您的第二个小组([^\>]{1,})找到一个或多个不关闭尖括号>的字符 - 这包括字母,数字,以及所有不属于{{1}的内容}。我相信这就是为什么你的比赛不符合你的期望;很难知道,因为你还没有告诉你到底想要匹配什么,模式匹配的字符串,或匹配的错误。

答案 2 :(得分:0)

如果我理解你的问题是正确的,你想过滤掉像< > @ /这样的东西吗?

如果是这种情况,您可以使用^[^\<\>\/\\\'\"]*$来匹配所有< > / \ ' "除外。

答案 3 :(得分:0)

让我们分解你的正则表达式(群组):

  1. ([\<]) =恰好一个<
  2. ([^\>]{1,}) = >的任何字符,一次或多次
  3. ([a-zA-Z]) =正好是一个小写或大写字母字符
  4. ([\>]) =恰好一个>
  5. 这就是<myemail@myemail.tld>等电子邮件地址匹配的原因:

    1. <
    2. myemail@myemail.tl
    3. d
    4. >
    5. <SPA@N>这样的类似标签的字符串:

      1. <
      2. SPA@
      3. N
      4. >
      5. < something inside this>

        1. <
        2. something inside thi(包括开头的空格)
        3. s
        4. >
        5. <man2>不匹配,因为2之前的数字>不是字母字符。

          基本解决方案:要匹配典型的HTML代码,您可以使用([\<]\/?)([a-zA-Z0-9]+)([\>])

          1. ([\<]\/?) =一个<</(用于结束标记)
          2. ([a-zA-Z0-9]+) =一个或多个字母数字(支持<h2>等)字符 - HTML元素名称
          3. ([\>]) =一个>
          4. 请注意,这不支持<br /><br/>等XHTML空标记符号,也不支持<a href="http://example.com">等属性的标记。有许多正则表达式资源,其中包含一系列HTML标记模式,电子邮件地址验证等。

            编辑:如果您正在进行任何过滤,请确保不要删除>个字符,因为这些字符通常用于纯文本电子邮件消息,以指示回复时的引用块。