問題タブ [preg-replace-callback]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - OPENおよびCLOSEという単語で囲まれていない特定の単語のすべての出現箇所を置き換えますか?
私は次の文字列を持っています:
OPEN誰かがこんにちはと言ったCLOSEimがこんにちは人々と言っているOPENいくつかがこんにちはと言ったOPEN彼らが再びこんにちはと言ったCLOSE私は今行かなければならないがCLOSE再びこんにちは!
helloのすべての出現箇所( OPENおよびCLOSEの単語で囲まれていない)を照合し、それらを別の単語に置き換えようとしています。おそらく、正規表現とPHPのpreg_replace
関数を使用します(ただし、他のメソッドを使用することはできません)。考えてみてください)。
したがって、上記の文字列から、以下が一致します(区別しやすいように、イタリック体の括弧で囲んでいます)。
OPEN誰かがこんにちはと言ったCLOSEim言っている(こんにちは)人々OPENいくつかが言ったこんにちはOPEN彼らは再びこんにちはと言ったCLOSE私はもう一度CLOSE (こんにちは)が行かなければならない!
これを行う方法がよくわかりません。
おそらくこれを編集すると、ネスト構造がより明確になります。
上からわかるように、helloはOPEN ... CLOSE内にあるため(無視されます)、他のアレントは置き換えられるため、通知されません。
php - php preg_replace_call:後で再挿入するために特定の値を抽出します
簡潔にするために...
文字列からアイテムを取り出して別の配列に入れ、文字列から抽出された値をIDトークンに置き換え、文字列を解析してから、抽出されたアイテムを元に戻します。元の位置(正しい順序で)。(それが理にかなっている場合は、残りをスキップしてください:D)
私は次の文字列を持っています。
「私の文章には[url]と[url]へのURLが含まれているため、私の生活は困難です。」
いろいろな理由で、URLを削除したいと思います。しかし、私はそれらの場所を維持し、後で(文字列の残りの部分を操作した後)それらを再挿入する必要があります。
したがって、私は欲しいです。
「私の文章には[url]と[url]へのURLが含まれているため、私の生活は困難です。」
になる;
「私の文章には[token1fortheURL]と[token2fortheURL]へのURLが含まれているため、私の生活は困難です。」
私はこれを何度か、さまざまな方法で試しました。私がしているのは、レンガの壁にぶつかって、新しい宣誓の言葉を発明することだけです!
次のコードを使用してセットアップします。
次に、preg_replace_callbackを実行します。
そして、私は次のように私の機能を持っています。
そして、ここでレンガの壁が起こり始めます。空白の抽出配列にデータを入れることはできますが、関数の外部では使用できません。文字列をトークンで更新できますが、置き換えられたURLにアクセスできなくなります。preg_replace_callback内の関数呼び出しに値を追加できないようです。
これが私を狂わせているので、誰かが助けてくれることを願っています。
アップデート:
@Lepidosteusによって提案された解決策に基づいて、私は次のように機能していると思いますか?
それはうまくいくようですか?
php - 複数のパラメーターを持つ PHP preg_replace_callback
正規表現の置換を行いたいのですが、見つかるたびに実行したくありません。preg_replace_callback を使用する必要があると思います。そこでランダム チェックを行うだけですが、コールバック関数に複数のパラメータを渡す方法がわかりません。最終的には 2 つ以上の作業が必要になりますが、2 つの作業を行うことができれば、おそらくさらに多くの作業を行うことができます。
たとえば、50% の確率で置換を行い、それ以外の場合は見つかったものを返すだけです。ここに私が取り組んできたいくつかの機能がありますが、正しく機能しません。
ありがとうアレン
php-5.3 - 関数($ match)を使用するときの500エラーpreg_replace_callback use($ video){}
php5.3.4を実行しているローカルホストで動作します
5.3.6を実行しているVPShostgatorアカウントでは機能しません
ここでの問題は「use」キーワードのようです
以下のコード
助けてくれてありがとう。
java - Java の Matcher クラスの PHP ポートはありますか?
いくつかのMatcherの使用法があるYUI のCssCompressorを PHP に移植しています。長期的なメンテナンスのために、私は PHP ポートを Java のオリジナルにできる限り似せておきたいと思っています (もちろん機能しますが、プログラムの流れを大幅に変更します)。preg_replace_callback
では、Matcher を PHP に移植した人はいますか?
php - preg_replace と preg_replace_callback のセキュリティ上の問題
わかりました、これが悪い習慣であることはわかっていますが、コードの一部が既存のものであり、1 つの引数でカスタム関数を実行するように拡張する必要があります。
したがって、ページはデータベースに保存され、テンプレートに表示されるとき、現在、html ページ全体で e 修飾子を使用して 3 つの異なる preg_replace 関数を使用しています。
これは遅いように見えるので、1 つの preg_replace 呼び出しのみを使用するように変更し、bbcode の方法で 1 つの引数を持つカスタム関数を提供できるようにしたいと思います: 例:
[FUNC:testfunc(テスト文字列)]
それで、これが私が思いついたものです...どの方法がより安全かはわかりません.e修飾子を持つpreg_rplace、またはpreg_replace_callback:
e 修飾子の使用について私が気に入っているのは、必要に応じて、次のように、必要に応じて php で直接関数呼び出しに別のパラメーターを追加できることです。
ある方法は他の方法よりも安全ですか? どちらも巨大なセキュリティ リスクですか? これらを実装する必要があります..
編集:次のような匿名関数を使用して、コールバック関数の追加パラメーターを渡すことができることがわかりました。
これにより、callback_caller() 関数が記事クラス全体に渡され、使用できるようになります。試合ごとにこのような無名関数を作成するのは、パフォーマンス的に悪いですか?
php - php - preg_replace_callback と ord() を使用してユーザー入力をクリーンアップしますか?
フォーラム スタイルのテキスト ボックスがあり、ユーザー入力をサニタイズして xss やコードの挿入を防止したいと考えています。私は htmlentities が使用されているのを見てきましたが、他の人は &,#,%,: 文字もエンコードする必要があると言っており、見れば見るほど潜在的に危険な文字がポップアップするようです. ^a-zA-z0-9 以外にも有効なテキスト オプションが多数あるため、ホワイトリスト登録には問題があります。私はこのコードを思いつきました。攻撃を阻止し、安全を確保するために機能しますか? それを使用しない理由、またはより良い方法はありますか?
編集: _ _ _ _ _ _ _ __ _ _ __ _ _ ____ _ _ _ もちろん間違っている可能性もありますが、htmlentities は & < > " (および ENT_QUOTES がオンになっている場合は ' のみ) を置き換えることを理解しています。これはおそらく、ほとんどの攻撃を阻止するのに十分です (率直に言って、トラフィックの少ないサイトにはおそらく十分すぎるでしょう)。 . しかし、細部への執拗な注意の中で、私はさらに掘り下げました. 私が持っている本は、「六角攻撃をシャットダウンする」ために # と % もエンコードするように警告しています.英数字以外のすべての文字を変換することを検討するようになりました. htmlentities がこれをすでに実行している場合は、素晴らしいことですが、そうではないようです. これは、Firefox で [ソースを表示] をクリックした後にコピーした、実行したコードの結果です.
オリジナル (テストするランダムな文字): 5: gjla#''*&$!jl:4
preg_replace_callback: <b>5:</b>gjla<hi>#''*&$!jl:4
htmlentities (w/ ENT_QUOTES): <b>5:</b>gjla<hi>#''*&$!jl:4
htmlentities は、次のような他の文字をエンコードしていないようです: テキストの壁で申し訳ありません。これは私が妄想しているだけですか?
編集#2:_ _ _ _ _ _ _ _
php - 外部クラスで preg_replace_callback を使用する
あなたに質問があります!
通常、OOP コンテキスト内でコールバック関数を呼び出す場合は、使用する必要がありますarray(&$this, 'callback_function')
それが私が理解したものです。
しかし、コールバック関数が多すぎるため、外部クラスでコールバックを呼び出したいと思っています。構造上の理由から、独自のクラスを提供したいと考えています。
「わかりました、このクラスのインスタンスを作成し、$this の代わりに渡します。」
array($cb, 'callback_function')
だから私はandで試しましたarray($this->cb, 'callback_function')
が、うまくいきません。
私は何を間違っていますか?
ご協力いただきありがとうございます!
編集:
私の基本クラスには次のものがあります。
そしてそれを呼び出す:
そして、私のコールバッククラスには次のものがあります:
php - preg_replace_callback() コールバックを使用して PHP でグローバル状態にアクセスする
たとえば、次のようなテキストがあります。
XYZ id dui vel erat bibendum hendrerit aliquet ac lorem. Integer ABC turpis, facilisis sit amet ultricies non, tempor LMNOP est. Aliquam sit amet sapien justo. Quisque TUV dolor dolor, eu sodales mi.
太字の単語を番号付きのプレースホルダーに置き換える必要があります。
%%%1%%% id dui vel erat bibendum hendrerit aliquet ac lorem. Integer %%%2%%% turpis, facilisis sit amet ultricies non, tempor %%%3%%% est. Aliquam sit amet sapien justo. Quisque %%%4%%% dolor dolor, eu sodales mi.
この置換を行うには、置換するテキスト (XYZ など) を配列に格納し、プレースホルダーの番号 (1 など) をキーにして、後で戻って元の値に戻すことができるようにする必要があります。
難しいのは、置換テキストが事前にわからないことです。そのため、既に置換されているアイテムの現在の数に基づいて生成するコールバックが必要です。
私は古いバージョンの PHP を実行しており、ツールキットで匿名関数を使用できないため、preg_replace_callback
. 私の問題は、私が作成した ( を使用してcreate_function
) 関数が共有グローバル状態にアクセスできるようにする必要があるという事実に要約されるようです。少なくとも、置き換えられたテキストをプッシュおよびポップできる共有グローバル配列です。スタック。
これは可能ですか?
php - preg_replace(_callback)を使用してハッシュタグ付きテキストを順番に置き換える方法
ターゲットテキストは次のようなものです。
Lorem ipsum dolor#sit#amet、consectetur#adipisicing#elit、sed do#eiusmod#tempor incididunt ut Labore et doloremagnaaliqua。Ut enim ad minim veniam、quis nostrud exercitation ullamco Laboris nisiutaliquip。
ハッシュタグ付きの#sit#、#adipisicing#、#eiusmod#に対応するデータは、次のような配列になります。
preg_replaceまたはpreg_replace_callbackを使用して、ハッシュタグを配列値に順番に置き換えたい。結果を取得するには:
どうすればそれを達成できますか?