我有一个小问题。我尝试编写一个函数来提取 C# 中的某些内容(我必须将正则表达式从 PHP 转换为 C#)。
我一般是这样写的:
public static class ExtensionMethods
{
public String PregReplace(this String input, string[] pattern, string[] replacements)
{
for (var i = 0; i < pattern.Length; i++)
{
input = Regex.Replace(input, pattern[i], replacements[i]);
}
return input;
}
}
但我对这些示例有疑问(PHP 中的代码)
preg_replace('@<head[^>]*?>.*?</head>@siu', ' ', $result);
preg_replace('@</?((frameset)|(frame)|(iframe))@iu', "\n\$0", $result);
但是当我在 C# 中使用这个正则表达式时
String[] pattern = new String[2]{"@<head[^>]*?>.*?</head>@siu", "@</?((frameset)|(frame)|(iframe))@iu"};
String[] replace = new String[2]{" ", "\n\$0"};
input.PregReplace(pattern , replace ); //my new function
我的输入没有任何差异(我没有捕捉到正则表达式)。你能帮我完成我的功能吗?我在正则表达式中有错误吗?
编辑:我将代码更改为:
String[] pattern = new String[2]{"<head[^>]*?>.*?</head>", "</?((frameset)|(frame)|(iframe))"};
String[] replace = new String[2]{" ", "\n\\$0"};
input = "input = "><head><title>something</title></head><body>sdegsehgaeg<frame>aggsd</frame></";
string s = input.PregReplace(pattern, replace);
在回答我得到
> <body>sdegsehgaeg
\<frame>aggsd
\</frame></
这是
> <body>sdegsehgaeg\n\\<frame>aggsd\n\\</frame></
对于\n\$0,这只是很多字符\。如果我将 \n\$0 更改为 \n\$0 我会收到错误(无法识别的转义序列)
好的,我解决了问题 (\n$0)
谢谢你的帮助。