2011-11-05 140 views
0

我已经在我的课堂上分配了一些sed作业,离完成作业还有一步之遥。我试图想出一个解决方案,并且没有任何工作达到我即将放弃的程度。如何使用Regex提取HTML标签之间的数据?

基本上,在文件中我有......我应该替换此:

<b>Some text here...each bold tag has different content...</b> 

Some text here...each bold tag has different content... 

我找到了部分完成的,但我无法弄清楚如何使用sed(regexp)“回显”提取的内容。

我设法将内容替换得很好,但是当我试图实际输出HTML标签之间出现错误的内容时。

如果这很混乱,我真的很抱歉。我已经在这个项目几个小时了,现在变得有些沮丧。基本上,为什么这不起作用?

s/<b>.*<\/b>/.*/g 

我只是想输出没有粗体标签的内容。

非常感谢!

+1

这是作业吗?哇。请将您的导师指向此处:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – Johnsyweb

回答

1

如果你想在替换中引用一部分正则表达式匹配,你需要将这部分正则表达式放到一个捕获组中,然后使用前面带有反斜杠的组编号引用它。请尝试以下操作:

s/<b>\(.*\)</b>/\1/g 
+0

sed中不支持惰性量词。 – forivall

+0

@jordoex - 谢谢!编辑了那部分。 –

1

您需要使用捕获组,这是括号()

所以,它只是这个:

s/<b>(.*)<\/b>/\1/g 

捕获组编号,从左到右,从1开始,并增加。

此语法是执行正则表达式的标准方法; sed的语法稍有不同。 sed命令是

sed 's/<b>\(.*\)<\/b>/\1/g' [file] 

sed -r 's/<b>(.*)<\/b>/\1/g' [file] 

当然,如果你只是想去掉粗体标记,其他的解决办法是只需更换用空格的HTML标签,像这样

sed 's/<\([^>]\|\(\"[^\"]\"\)\)*>//g' [file] 

(我不喜欢的sed的需要都逃不过)

s/<([^\]|(\"[^\"]\"))*>//g 
相关问题