問題タブ [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.

0 投票する
3 に答える
613 参照

php - この preg_replace_callback は PHP で何をしますか? どうすればメモリリークを止めることができますか?

b2evo PHP サイトに、次のことを行うコードのセクションがあります。

コードのこのセクションは何をしますか? 私の推測では、128 から 256 の間の ASCII 文字が取り除かれていると思いますが、確かではありません。

また、現状では、このコードがページ内から呼び出されるたびに、PHP は最大 2K のメモリを割り当ててから解放しません。関数がページで 1000 回以上呼び出されると (これが発生する可能性があります)、そのページは余分に 2MB のメモリを使用します。

これにより、Web アプリケーションで問題が発生しています。なぜ私はメモリを失っているのですか? また、メモリ リークが発生しないようにこれを書き直すにはどうすればよいですか?

0 投票する
3 に答える
1001 参照

php - preg_replace_callback() メモリの問題

検索/置換機能のテスト中にメモリの問題が発生しました。

検索対象は次のとおりです。

検索する文字列:

置換関数のコールバック:

そして呼び出し:

これで、完全な検索パターンがデータベースから取得されます。現在のところ、次のとおりです。

この $find パターンは、7 つの mysql テーブルの 23 列で検索されます (見つかった場合は置き換えられます)。

preg_replace_callback() の代わりに提案された preg_replace() を使用すると、メモリの問題は解決したようですが、途中で新しい問題が発生しています: preg_replace() によって返された件名に多くのコンテンツがありません...

アップデート:

コンテンツの損失は preg_quote($find,'/'); の使用によるものです。プロセス後に「A」になる「A+」を除いて、現在は機能しています。

0 投票する
3 に答える
497 参照

php - テキスト内の bbcode YouTube タグを解析し、ビデオ ID を含む html に置き換えます

次のような bbcode タグを解析するブログを作成しています。

入力:<youtube=http://www.youtube.com/watch?v=VIDEO_ID&feature=channel>
出力:

私の関数は今のところ信じられないほど単純です。現在、差分プロセス関数を呼び出すマスター プロセス関数があります。この場合、そのうちの 1 つが processYouTubeVideos() です。だから私はそれを次のように呼びます:

processYouTubeVideos() は youtube タグ内から完全に URL を受け取りますが、何らかの理由で、explode() (または分割) を使用すると区切り文字が見つかりません。「u」や「tube」などのテスト値を使用しても...

0 投票する
1 に答える
417 参照

php - preg_replace_callback - 2 回行う

ヨ、私はこのスクリプトを機能させようとしていますが、機能しません。preg_replace_callback を 2 つの異なる関数で 2 回実行するにはどうすればよいですか。ありがとう!

0 投票する
2 に答える
144 参照

php - 正規表現: preg_replace_callback で使用される不完全な構文?

このリンク PHP regex templating からコードを借用しました- {{var}} のすべての出現箇所を見つけて、テンプレート ファイルに値を適用する手段を実装します。これは preg_replace_callback() 関数を使用します

私の好みの命名方法は、name1_name2_name3=value ではなく、name1.name2.name3=value ですが、使用している正規表現には問題があるようです。

これは機能しません。

テンプレートファイル

.ini 値

使用される正規表現

print_r($matches) の出力

$matches[1] が間違ったキーキーであるため、置換が間違っています。

この機能を既に提供しているライブラリがあり、それらについて知りたいと思っていますが、それでも正規表現の欠点を知りたいです。

不完全な正規表現を含むフルコードを以下に示します。

照合するテンプレート

.ini ファイルの内容

0 投票する
1 に答える
656 参照

php - 名前付き(サブ)グループを介してxmlのようなタグから値を抽出/置換する正規表現

PHP で単純なテキスト トランスレータを作成しようとしています。

次のように一致する必要があります。

言語はオプションにすることができます

コードは次のとおりです。

「属性」を抽出しますが、最後の属性のみをフェッチします。私が最初に考えたのは、PHP がすべての一致で (名前付きの) 配列要素を上書きするとき、それはグループの名前付けに関係しているということでした。ただし、グループの名前を省略すると、最後の一致のみが返されます。

例としてコールバックに返される配列を次に示します

0 投票する
1 に答える
176 参照

php - 正規表現、preg_replace_callback 質問 PHP

これが私の正規表現のために持っているものです。これが最善の方法であるかどうか疑問に思っていました。

識別子の間隔に関係なく、大文字と小文字を区別せずに、類似したものを見つけられるようにしたいと考えています。そして、可能であれば、順序について心配する必要はありません..

例:

これが私の既存のコードです:

0 投票する
2 に答える
1825 参照

php - PHPの正規表現preg_replace_callback

正規表現は私のものではありません。:(

次のような複数のサブ文字列を含む可能性のある文字列があります。

基本的に、各オカレンスを、各変数を取得する関数の結果に置き換える必要があります。

私は111、222、333、444を期待しています。

しかし、私は愛を感じていません。どんな助けでもいただければ幸いです!

編集:いくつかの説明..

私は質問のために単純化していた。

  1. 「vars」は実際には「var1」とは呼ばれず、「var2」は[recID = "22" template = "theName" option = "some value"、type="list"]のようになります。

  2. コールバックは、私の単純な実装よりも複雑になります...「id」を使用してデータベースに接続し、レコードを取得してテンプレートに挿入します...したがって、コールバックが必要です...

  3. 一致する値は、数値だけでなく、ほとんど何でもかまいません。

0 投票する
3 に答える
123 参照

php - preg_replace_callback のコールバック内からどの置換が行われているかをどうにかして知ることはできますか?

文字列内の特定のトークンを置き換えるためにpreg_replace_callbackを使用しています。しかし、実際のトークンとは別に、そのトークンがサブジェクト文字列の 1 番目、2 番目、または 3 番目であったかどうかも知る必要があります。その情報にアクセスする方法はありますか?

preg_replace_callback 定義 ( http://php.net/manual/en/function.preg-replace-callback.php ) で引数$countを見つけました。これは置換をカウントしますが、コールバック内からアクセスできるかどうかはわかりません. 説明されたコンテキストでの使用例はありますか?

0 投票する
3 に答える
12076 参照

php - preg_replace_callbackコールバック関数で別のパラメーターを渡す方法はありますか?

うーん、みんな、私は本当に私の英語が私が必要なものを説明するのに十分な能力があることを願っています。

このコードの(これは単なる例です!)を見てみましょう。

したがって、phpマニュアルには、クラスメソッドをのコールバックとして使用するにpreg_replace_callback()は、メソッドが抽象である必要があると記載されています。

Somethingコールバック関数で、以前に初期化されたオブジェクトのインスタンス(この例ではクラスのインスタンス)を渡す必要があります。

を使用しようとしましたが、機能しcall_user_func()ません(この方法では、matchesパラメーターが欠落しているため)。

それを行う方法はありますか、またはプロセスを分離する方法はありますか(前preg_match_allに実行し、一致するたびに置換値を取得してから、単純にしpreg_replaceます)?

編集:補足として、tom haighの回答の前に、この回避策を使用しました(この例では、これはReplaceメソッドです):

希望は誰かを助けることができます。