0

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

谢谢你的帮助。

4

1 回答 1

1

删除@代码中的 ,以及siu最后iu一个@. 在 php 中,您需要这些修饰符,在 C# 中,RegexOptions如果需要,您会调用一些修饰符。

于 2012-08-28T06:45:18.723 回答