5

PHP ファイルを解析し、関数のプロトタイプ要素を HTML でラップしています。ただし、アンパサンドがあると、コードが壊れます。

入力: function foo (&$var1, &$var2){...}//文字列として
希望する出力 (HTML 内) : &$var1, &$var2 //基本的には、ブラウザに正しく表示されるように変数を出力するだけです

現在、各変数を awk のサブメソッド1に送信してから、sed に送信しています。

sub(/^&/, "\\\&", param)  #param is the variable of interest (e.g. &$var1)

#Intermediate step in case it's relevant. The awk-processed elements 
#are sent to ${file}_param.txt. Each set of parameters are delimited by colons.
param=$(cut -d: -f$counter ${file}_param.txt) 

#Replace some default text in template file with real stuff.
sed -i "s|@PARAM|$param|1" "$base"_funct_def.txt

私が得ている出力:アンパサンドは解釈されています。試合全体が置き換えられます。

問題の分離:代わりに次のようにすると、ブラウザに「g$var1」が表示されます。ただし、代わりに「&」を取得しようとしています。

sub(/^&/, "g", param)

私の試み: awk が最初にそれを '\&' に処理し、それが sed に供給されて '\&' をリテラルの '&' として解釈すると考えたので、3 つのバックスラッシュを使用しました。ただし、1〜6個のバックスラッシュを試しましたが、役に立ちませんでした。

質問:どうすれば & をエスケープできますか?

1マニュアル: http://www.staff.science.uu.nl/~oostr102/docs/nawk/nawk_92.html


私がやろうとしていることに関するいくつかの「メタ」/デザインの質問 (質問には必要ありません!!)
私は、(Javadocs のように構造化された) 少しのドキュメントを生成しようとしている PHP ファイルをたくさん持っています。関数名、パラメーター、および戻り項目を一覧表示するために、REGEX とシェル スクリプトを使用して解析しています。これまでのところ、REGEX はかなりうまく機能していると思いますが、これがどのように REGEX を使用すべきではないかについて多くのことを読みました。これに関するコメントを歓迎します (ドキュメントは通常どのように生成されますか?)。みんなありがとう!

4

3 に答える 3

0

HTML&はアンパサンド文字として読み取られると思います。awk スクリプトでは、次を使用できます。

sub(/^&/, "&", param)

ドル記号はparamバックスラッシュでエスケープする必要があります。たとえば、&$var は &\$var のように記述する必要があります。そうしないと、sed と awk が $var を変数として展開しようとします。

于 2013-06-21T18:57:49.317 に答える
0

2 つのバックスラッシュ (つまりsub(/^&/, "\\&", param)) を使用するとうまくいきます。うまくいきませんか?

質問で参照した nawk マニュアルに記載されています。

通常、バックスラッシュを文字列に 1 つ挿入するには、バックスラッシュを 2 つ記述する必要があります。したがって、文字列定数に `\\&' を記述して、リテラル `&' を置換に含めます。

また、sub()関数は基本的にアンパサンドをアンパサンドに置き換えています。そのため、2 つのバックスラッシュを使用しても機能しないと思われるのかもしれません。

于 2013-06-22T06:36:27.653 に答える