我有个小问题。我试图编写一个函数来提取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#中使用这个regulatx表达式时
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,我会得到错误(识别的转义序列)
好的,我解决了问题($0)
谢谢你的帮助。
删除代码中的@
,以及最后一个@
之后的siu
和iu
。在php中,您需要这些修饰符,在C#中,如果需要,您可以调用一些RegexOptions
。