正则表达式从C#到PHP

时间:2018-07-02 11:50:27

标签: php regex

我有使用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>.

种种问候,

1 个答案:

答案 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>.

PHP live demo