描述
如果您正在寻找一个简单的正则表达式解决方案并且您的输入并不复杂,那么您可以试试这个
<meta\b[^>]*\bname=["]keywords["][^>]*\bcontent=(['"]?)((?:[^,>"'],?){1,})\1[>]
这将提取内容字段中的值。
第 1 组是未结报价,然后需要在值结束时关闭。第 2 组是可以用逗号分割的内容。
免责声明
这个表达式在一些简单的边缘情况下可能会失败,这就是为什么不应该使用正则表达式来解析 HTML,而应该使用 html 解析引擎。
C# 示例
using System;
using System.Text.RegularExpressions;
namespace myapp
{
class Class1
{
static void Main(string[] args)
{
String sourcestring = "source string to match with pattern";
Regex re = new Regex(@"<meta\b[^>]*\bname=[""]keywords[""][^>]*\bcontent=(['""]?)((?:[^,>""'],?){1,})\1[>]",RegexOptions.IgnoreCase);
MatchCollection mc = re.Matches(sourcestring);
int mIdx=0;
foreach (Match m in mc)
{
for (int gIdx = 0; gIdx < m.Groups.Count; gIdx++)
{
Console.WriteLine("[{0}][{1}] = {2}", mIdx, re.GetGroupNames()[gIdx], m.Groups[gIdx].Value);
}
mIdx++;
}
}
}
}
$matches Array:
(
[0] => Array
(
[0] => <meta name="keywords" content="Keyword1, Keyword2, Keyword3...">
)
[1] => Array
(
[0] => "
)
[2] => Array
(
[0] => Keyword1, Keyword2, Keyword3...
)
)