我已经试图解决下面的问题,但我会很感激每一条评论或建议。
HTML文字
<div style="font-size:8pt; font-family: Calibri, sans-serif;">Some text here</div>
2)Powershell v.3
解析给定文本并仅选择标记
$text_to_parse = '<div style="font-size:8pt; font-family: Calibri, sans-serif;">Some text here</div>'
if($text_to_parse -match '</?div[^<>]*>'){$Matches | fl}
Name : 0
Value : <div style="font-size:8pt; font-family: Calibri, sans-serif;">
1)正如您所看到的,尽管/?
量词,但它并未显示第二场比赛
2)我明白,必须有&#34; Global&#34;锚,但即使在MSDN中也找不到它:http://msdn.microsoft.com/library/az24scfc.aspx
3)即使我在开始时为一个或多个角色添加模式,\G
锚也不起作用:
if($text_to_parse -match '\G<.*?/?div[^<>]*>'){$Matches | fl}
Name : 0
Value : <div style="font-size:8pt; font-family: Calibri, sans-serif;">`
1)我做错了什么?我花了4个多小时试图找出它没有任何成功。 2)有没有&#34; Global&#34;在Powershell的RegEx实现中锚定? 3)最后,如何仅将HTML标记与正则表达式匹配?我可以这样做:
($text_to_parse -replace '\G<.*?/?div[^<>]*>',"").TrimEnd("</div>")
得到这个:
Some text here
但是我想用正则表达式来做这件事。
亲切的问候, 尤里
答案 0 :(得分:1)
-match
运算符仅返回第一个匹配项。要获得多个匹配项,请使用以下语法:
$text_to_parse = '<div style="font-size:8pt; font-family: Calibri, sans-serif;">Some text here</div>' ;
$matches = ([regex]'</?div[^<>]*>').Matches($text_to_parse) ;
$matches[1].Value ; # returns second your occurrence, "</div>"
此方法将返回我们都知道和喜爱的匹配数组,您可以按照自己的方式处理它们。
答案 1 :(得分:0)
如果我理解正确,您希望匹配标签内的文字。然后使用这样的东西:
$text_to_parse -replace '<div[^>]+>(.*?)</div>', '$1'
它只返回文本。
Some text here
除了获得多个匹配提醒我这个任务:
给定测试“ab cd ef ax 0 a0”选择所有以“a”开头的字符串
然后
$s = "ab cd ef ax 0 a0"
$s -match '\ba\w'
是用途,但你可以这样做:
$s | Select-String '\ba\w' -AllMatches |
% { $_.Matches } | # select matches
% { $_.Value } # selectt values from matches
在V3中它可能更简单,这适用于V2。