0

我正在尝试使用正则表达式将 ColdFusion 网站转换为 PHP。我还没有找到可以做的事情,所以我自己做。

幸运的是,coldfusion 网站在编程方面是基本的,正则表达式可以完成这项工作。

但是,我被困在某个地方。我怎样才能提取这样的东西?

  1. <cfset mailfrom="嘿">
  2. <cfset mailfrom='嘿'>
  3. <cfset mailfrom=hey>
  4. <cfset mailfrom = 嘿>
  5. <cfset mailfrom="<hey>">

我确实尝试了以下模式:

preg_match_all('/<cfset (.*)( )=(| |\'|")(.*)(|\'|")>/iU', $this->Content, $customTags, PREG_SET_ORDER);

它有时有效,有时无效。我的 ColdFusion 代码可能在 1 行或 1000 行。所以有时你会看到这样的东西<cfset mailfrom="hey"><cfset fdsfsd="3333">

一旦我知道完整的字符串 ( <cfset mailfrom="hey">) 以及用 ( $mailfrom = "hey";) 替换的内容,我就可以毫无问题地解析它,所以这意味着正则表达式必须至少给我变量名称和值。

谢谢。

编辑 :

我用这个:

preg_match_all('/<cfparam\s*([^>]*)\s*\/?>/i', $this->Content, $customTags, PREG_SET_ORDER);

匹配 <cfparam name="" default="">。我想我可以用同样的方式做,但是 parse(. ) = (. ) (Var = value)

但这里的问题是这个正则表达式不能匹配值区域中的 < 和 >。

4

2 回答 2

0

像这样的东西?/cfset\s*(?<key>[^=]+)\s*=\s*["'](?<value>[^"']+)["']/i

例如,字符串<cfset mailfrom="hey"> $match["key"]ismailfrom$match["value"]is key但不要忘记:您不应该使用正则表达式解析 [X]HTML。

于 2012-05-15T16:55:51.557 回答
0

正则表达式在层次结构方面表现不佳,这正是您出现问题的原因。考虑使用 DOM,它的实现在 PHP 中很笨拙,但这正是它的任务。

于 2012-05-15T16:34:01.063 回答