PHP这个preg_替换为C#

PHP这个preg_替换为C#,c#,php,regex,C#,Php,Regex,我已尝试转换以下preg_替换: $text = preg_replace("|($word)|iu", "<span style=\"background: #DEF9D9; font-family: Arial;\">$1</span>", $text); $text=preg_replace(“|($word)| iu”、“$1”、$text); 转换成C代码: text=Regex.Replace(text,“|”(“+word+”))| iu“,“$1”);

我已尝试转换以下preg_替换:

$text = preg_replace("|($word)|iu", "<span style=\"background: #DEF9D9; font-family: Arial;\">$1</span>", $text);
$text=preg_replace(“|($word)| iu”、“$1”、$text);
转换成C代码:

text=Regex.Replace(text,“|”(“+word+”))| iu“,“$1”);

但出于某种原因,这种替代是错误的。它放置html标记(
不要忘记转义管道字符:

text = Regex.Replace(text, "\\|(" + word + ")\\|iu", "<span style=\"background: #DEF9D9; font-family: Arial;\">$1</span>");
text=Regex.Replace(text,“\\\\”(“+word+”)\\\\\\\\\\\\\\”)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;

因此,正则表达式引擎将它们解释为文字管道,而不是交替运算符。

PHP的独特之处在于要求您将正则表达式编写为字符串文字,并添加正则表达式分隔符(
,在您的情况下)。您需要做的第一件事是去掉管道。
i
(不区分大小写)还有
u
(Unicode)修饰符也需要使用。您可以通过在正则表达式的开头添加
(?i)
(顺便说一句,它也可以在PHP中工作)来使正则表达式不区分大小写。不需要
u
;C#字符串始终是Unicode,而.NET的正则表达式风格始终是Unicode模式

该代码的C版本将是:

text = Regex.Replace(text, "(?i)(" + word + ")", "<span style=\"background: #DEF9D9; font-family: Arial;\">$1</span>");

…它要么匹配nothing(因为第一个管道之前没有任何内容),要么匹配
foo
iu

管道和
iu
不应该是正则表达式的一部分。正如我在回答中所解释的,它们需要删除。我从来不知道正则表达式在PHP中的工作方式如此奇怪。谢谢!
text = Regex.Replace(text, "(?i)(" + word + ")", "<span style=\"background: #DEF9D9; font-family: Arial;\">$1</span>");
|(foo)|iu