无法理解,为什么我的正则表达式不仅仅是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
答案 0 :(得分:1)
答案 1 :(得分:0)
您的第二个小组([^\>]{1,})
找到一个或多个不关闭尖括号>
的字符 - 这包括字母,数字,以及所有不属于{{1}的内容}。我相信这就是为什么你的比赛不符合你的期望;很难知道,因为你还没有告诉你到底想要匹配什么,模式匹配的字符串,或匹配的错误。
答案 2 :(得分:0)
如果我理解你的问题是正确的,你想过滤掉像< > @ /
这样的东西吗?
如果是这种情况,您可以使用^[^\<\>\/\\\'\"]*$
来匹配所有,< > / \ ' "
除外。
答案 3 :(得分:0)
让我们分解你的正则表达式(群组):
([\<])
=恰好一个<
([^\>]{1,})
= 不 >
的任何字符,一次或多次([a-zA-Z])
=正好是一个小写或大写字母字符([\>])
=恰好一个>
这就是<myemail@myemail.tld>
等电子邮件地址匹配的原因:
<
myemail@myemail.tl
d
>
像<SPA@N>
这样的类似标签的字符串:
<
SPA@
N
>
或< something inside this>
:
<
something inside thi
(包括开头的空格)s
>
<man2>
不匹配,因为2
之前的数字>
不是字母字符。
基本解决方案:要匹配典型的HTML代码,您可以使用([\<]\/?)([a-zA-Z0-9]+)([\>])
([\<]\/?)
=一个<
或</
(用于结束标记)([a-zA-Z0-9]+)
=一个或多个字母数字(支持<h2>
等)字符 - HTML元素名称([\>])
=一个>
请注意,这不支持<br />
或<br/>
等XHTML空标记符号,也不支持<a href="http://example.com">
等属性的标记。有许多正则表达式资源,其中包含一系列HTML标记模式,电子邮件地址验证等。
编辑:如果您正在进行任何过滤,请确保不要删除>
个字符,因为这些字符通常用于纯文本电子邮件消息,以指示回复时的引用块。