我有使用C#运行的代码。
var phrase = "// Hi++ My name's Jon'ss and .. ''c and d''ef.";
var phraseCompressed = string.Empty;
var wordRegex = new Regex(@"(\W*)(\w+)(\W*)", RegexOptions.IgnoreCase);
var matches = wordRegex.Matches(phrase);
foreach (Match match in matches)
{
phraseCompressed += match.Groups[1].Value;
phraseCompressed += "<" + match.Groups[2].Value + ">";
phraseCompressed += match.Groups[3].Value;
}
Console.WriteLine("Input : " + phrase);
Console.WriteLine("Output : " + phraseCompressed);
Console.ReadLine();
我需要一些帮助将此代码转换为PHP。
PHP和C#中的Regex似乎不同。
这是解决方案的草稿(不起作用):
$phrase = "// Hi++ My name's Jon'ss and .. ''c and d''ef.";
$phraseCompressed = "";
preg_match("/(.*)(w+)(.*)/", $phrase, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
我想我的正则表达式在PHP中不能正常运行。
预期结果:
Input : // Hi++ My name's Jon'ss and .. ''c and d''ef.
Output : // <Hi>++ <My> <name>'<s> <Jon>'<ss> <and> .. ''<c> <and> <d>''<ef>.
种种问候,
答案 0 :(得分:0)
您没有正确构建正则表达式。 w+
不等于\w+
。前者匹配一个或多个出现的字母w
,而后者匹配单词。
您的C#代码中也有一个foreach循环,但是在PHP中错过了它。此外,preg_match
返回一个匹配项,而preg_match_all
返回全部。您最好尝试使用preg_replace
:
echo preg_replace('/\w+/', '<$0>', $phrase);
# // <Hi>++ <My> <name>'<s> <Jon>'<ss> <and> .. ''<c> <and> <d>''<ef>.