PHP 的 preg_replace() 函數功能強大,支援陣列作為模式與替換值,可一次完成多組字串替換。本文示範如何在 C# 中以擴充方法實作相同行為,方便 .NET 開發者移植 PHP 邏輯。
函數原型:mixed preg_replace (mixed $pattern, mixed $replacement, mixed $subject [, int $limit])
$limit 可限制替換次數,預設全部替換<?php
$string = "Name: {Name}<br>\nEmail: {Email}<br>\nAddress: {Address}<br>\n";
$patterns = array("/{Address}/", "/{Name}/", "/{Email}/");
$replacements = array(
"No.5, Wilson St., New York, U.S.A",
"Thomas Ching",
"tom@emailaddress.com"
);
print preg_replace($patterns, $replacements, $string);
?>
輸出結果:
Name: Thomas Ching
Email: tom@emailaddress.com
Address: No.5, Wilson St., New York, U.S.A
using System;
using System.Text.RegularExpressions;
public static class StringExtensions
{
///
/// 模擬 PHP preg_replace 多模式替換
///
public static string PregReplace(this string input, string[] patterns, string[] replacements)
{
if (patterns.Length != replacements.Length)
throw new ArgumentException("模式陣列與替換陣列長度必須一致");
for (int i = 0; i < patterns.Length; i++)
{
input = Regex.Replace(input, patterns[i], replacements[i]);
}
return input;
}
}
string template = "Name: {Name}\nEmail: {Email}\nAddress: {Address}\n";
string[] patterns = { @"\{Address\}", @"\{Name\}", @"\{Email\}" };
string[] replacements = { "No.5, Wilson St., New York, U.S.A", "Thomas Ching", "tom@emailaddress.com" };
string result = template.PregReplace(patterns, replacements);
Console.WriteLine(result);
RegexOptions.IgnoreCase\{)StringBuilder 提升效能