2012-08-28 28 views
0

我有一个小问题。我尝试编写一个函数来提取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)

谢谢你的帮助。

+0

我以前要求repolace函数,它不回答你的正则表达式相关的问题,但[这里很好的答案](http://stackoverflow.com/a/9600320/704144)可以为你提供一个替代方案。 –

+0

现在应该有一个替换。你是否像这样使用它? string s = input.PregReplace(pattern,replace);请记住,该函数正在返回一个NEW字符串。 – oopbase

回答

1

删除代码中的@,删除和iu后的最后一个@。在PHP中,你需要这些修饰符,如果需要,你可以在C#中调用一些RegexOptions

+1

您也可以使用[this site](http://regexhero.net/tester/)来检查语法。我认为还有其他人,但我觉得这对C#很有用。 – Nashibukasan