我需要匹配所有这些开始标记:
<p>
<a href="foo">
Run Code Online (Sandbox Code Playgroud)
但不是这些:
<br />
<hr class="foo" />
Run Code Online (Sandbox Code Playgroud)
我想出了这个,并希望确保我做对了.我只抓住了a-z.
<([a-z]+) *[^/]*?>
Run Code Online (Sandbox Code Playgroud)
我相信它说:
/,然后我有这个权利吗?更重要的是,你怎么看?
一个错误我看到人们做了,并再次试图解析XML或HTML用正则表达式.以下是解析XML和HTML很难的几个原因:
人们希望将文件视为一系列行,但这是有效的:
<tag
attr="5"
/>
Run Code Online (Sandbox Code Playgroud)
人们希望将<或<tag视为标记的开头,但是这样的东西存在于野外:
<img src="imgtag.gif" alt="<img>" />
Run Code Online (Sandbox Code Playgroud)
人们通常希望将起始标记与结束标记匹配,但XML和HTML允许标记包含自身(传统的正则表达式根本无法处理):
<span id="outer"><span id="inner">foo</span></span>
Run Code Online (Sandbox Code Playgroud)
人们通常希望匹配文档的内容(例如着名的"查找给定页面上的所有电话号码"问题),但数据可能会被标记(即使在查看时看起来是正常的):
<span class="phonenum">(<span class="area code">703</span>)
<span class="prefix">348</span>-<span class="linenum">3020</span></span>
Run Code Online (Sandbox Code Playgroud)
评论可能包含格式不正确或不完整的标记:
<a href="foo">foo</a>
<!-- FIXME:
<a href="
-->
<a href="bar">bar</a>
Run Code Online (Sandbox Code Playgroud)
你还知道其他什么问题?
在探索正则表达式(也称为RegEx-es)时,有许多人似乎将正则表达式视为圣杯.看起来如此复杂的东西 - 只是必须回答任何问题.他们倾向于认为使用正则表达式可以解决所有问题.
另一方面,也有许多人试图不惜一切代价避免使用正则表达式.他们试图找到解决正则表达式的方法并接受额外的编码只是为了它,即使正则表达式是一个更紧凑的解决方案.
为什么正则表达式被认为是如此有争议?是否存在关于它们如何工作的普遍误解?或者可能是一个普遍的信念,正则表达式通常很慢?
似乎stackoverflow上的每个问题,其中提问者使用正则表达式从HTML中获取一些信息将不可避免地有一个"答案",表示不使用正则表达式来解析HTML.
为什么不?我知道那里有引用 - 不引用"真正的"HTML解析器,比如Beautiful Soup,我相信它们是强大而有用的,但是如果你只是做一些简单,快速或肮脏的事情,那么为什么当一些正则表达式语句运行得很好时,麻烦使用如此复杂的东西?
此外,是否有一些基本的东西,我不了解正则表达式,这使得它们一般是解析的错误选择?
是否有库或可接受的方法来清理html页面的输入?
在这种情况下,我有一个只有姓名,电话号码和电子邮件地址的表单.
代码必须是C#.
例如:
"<script src='bobs.js'>John Doe</script>" 应该成为 "John Doe"
我刚刚回顾了我之前发过的一篇文章,并注意到一些人建议我不使用正则表达式来解析xml.在这种情况下,xml相对简单,Regex没有任何问题.我还在解析许多其他代码格式,所以为了统一起见,它是有意义的.但我很好奇这可能会在其他情况下造成问题.这只是一个"不要重新发明轮子"的问题吗?
目前,我有以下c#代码从文本中提取值.如果是XML,我想要其中的值 - 否则,如果它不是XML,它只能返回文本本身.
String data = "..."
try
{
return XElement.Parse(data).Value;
}
catch (System.Xml.XmlException)
{
return data;
}
Run Code Online (Sandbox Code Playgroud)
我知道C#中的异常是昂贵的,所以我想知道是否有更好的方法来确定我正在处理的文本是否是xml?
我想到了正则表达式测试,但我不认为这是一个更便宜的替代方案.请注意,我要求一种更便宜的方法.
我认识的人一直在告诉我应该避免RegEx,因为它是重量级的或者涉及繁重的处理.这是真的?这让我耳边鼓掌,直到现在我的耳膜响了起来.
我不知道为什么他告诉我.它可能来自经验还是仅仅是三手资料(你知道我的意思......)?
所以,明白地说,我为什么要避免使用正则表达式?
我希望SO社区的主人提供信息,与我分享他们的想法.多谢你们!
很明显,有很多问题看起来像一个简单的正则表达式将解决,但事实证明,使用正则表达式很难解决.
那么,不是正则表达式专家的人怎么知道他/她是否应该学习正则表达式来解决给定的问题?
(请参阅"正则表达式解析C#源代码以查找所有字符串",以便我提出这个问题.)
这似乎总结得很好:
(我刚刚更改了问题的标题以使其更具体,因为在C#中使用Regex的一些问题在Perl和JScript中得到了解决,例如,两个引用级别使Regex难以理解.)
我正在寻找一些健壮的,记录良好的PHP Web爬虫脚本.也许是Java项目的PHP端口 - http://wiki.apache.org/nutch/NutchTutorial
我正在寻找免费和非免费版本.
regex ×7
c# ×3
xml ×3
html ×2
xml-parsing ×2
html-parsing ×1
java ×1
optimization ×1
php ×1
web-crawler ×1
xhtml ×1