一个错误我看到人们做了,并再次试图解析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)
你还知道其他什么问题?
如何使用各种语言解析HTML并解析库?
回答时:
个人评论将链接到有关如何使用正则表达式解析HTML的问题的答案,作为展示正确行事方式的一种方式.
为了保持一致性,我要求该示例解析hrefin锚标记的HTML文件.为了便于搜索此问题,我要求您遵循此格式
语言:[语言名称]
图书馆:[图书馆名称]
[example code]
Run Code Online (Sandbox Code Playgroud)
请使库成为库文档的链接.如果您想提供除提取链接之外的示例,还请包括:
目的:[解析的作用]
在linux shell脚本中使用正则表达式解析字符串的正确方法是什么?我写了下面的脚本来使用curl和在控制台上打印我的SO代表sed(并不仅仅是因为我反复疯狂 - 我在尝试学习一些shell脚本和正则表达式之前切换到linux).
json=$(curl -s http://stackoverflow.com/users/flair/165297.json)
echo $json | sed 's/.*"reputation":"\([0-9,]\{1,\}\)".*/\1/' | sed s/,//
Run Code Online (Sandbox Code Playgroud)
但不知何故,我觉得这sed不适合在这里使用.我听说这grep是关于正则表达式并且稍微探讨了一下.但显然它会在找到匹配时打印整行 - 我试图从单行文本中提取一个数字.这是我正在处理的字符串的缩小版本(返回curl).
{"displayName":"Amarghosh","声誉":"2,737","badgeHtml":"\ u003cspan title = \"1银徽章\"\ u003e\u003cspan class = \"badge2 \"\ u003e●\u003c/span\u003e\u003cspan class = \"badgecount \"\ u003e1\u003c/span\u003e\u003c/span\u003e"}
我想我的问题是:
sed在这里使用是正确的吗? grep吗?可能重复:
如何使用Perl从HTML中删除外部链接?
好吧,我正在为一个客户工作,他刚刚将他的语言选择改为Perl.我不是Perl中最好的,但我之前用它做过这样的事情,虽然不久前.
有很多像这样的链接:
<a href="/en/subtitles/3586224/death-becomes-her-en" title="subtitlesDeath Becomes Her" onclick="reLink('/en/subtitles/3586224/death-becomes-her-en');" class="bnone">Death Becomes Her
(1992)</a>
Run Code Online (Sandbox Code Playgroud)
我想匹配路径"/ en/subtitles/3586224/death-become-her-en"并将它们放入数组或列表中(不确定Perl中哪些更好).我一直在搜索perl文档,以及查看正则表达式教程,并且大多数(如果不是全部)似乎都倾向于使用〜=来匹配内容而不是捕获匹配.
谢谢,
科迪