我有一个小问题。我尝试编写一个函数来提取C#中的东西(我必须将正则表达式从PHP转换为C#)。在C#中的正则表达式(来自PHP的正则表达式)
我一般写这样的:
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#这个regulax表达
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 I得到错误(urecognized转义序列)
好吧,我解决的问题(\ N $ 0)
谢谢你的帮助。
我以前要求repolace函数,它不回答你的正则表达式相关的问题,但[这里很好的答案](http://stackoverflow.com/a/9600320/704144)可以为你提供一个替代方案。 –
现在应该有一个替换。你是否像这样使用它? string s = input.PregReplace(pattern,replace);请记住,该函数正在返回一个NEW字符串。 – oopbase