0

正規表現を使用して ColdFusion Web サイトを PHP に変換しようとしています。やりたいことが見つからないので、自分でやる。

幸運なことに、coldfusion の Web サイトはプログラミングという点では基本的なものであり、正規表現で十分です。

しかし、私はどこかで立ち往生しています。このようなものを抽出するにはどうすればよいですか?

  1. <cfset mailfrom="hey">
  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

正規表現は階層に関してはうまく機能していません。これがまさにあなたの問題の理由です。DOM の使用を検討してください。その実装は PHP では扱いにくいですが、それはまさに DOM のタスクです。

于 2012-05-15T16:34:01.063 に答える
0

このようなもの?/cfset\s*(?<key>[^=]+)\s*=\s*["'](?<value>[^"']+)["']/i

たとえば、文字列<cfset mailfrom="hey"> $match["key"]は ismailfromおよび$match["value"]iskeyです。ただし、忘れないでください: [X]HTML を正規表現で解析するべきではありません。

于 2012-05-15T16:55:51.557 に答える