0

私はこのようなコードのリポジトリにたくさんの呼び出しがあります:

$out = $this->call('myApp.Settings.Menus.something.doSomething', $input);

$this->call()の最初のパラメータにピリオドが1つしかない正規表現を使用して、そのすべてのインスタンスを検索したいと思います。

私はこれで近づいていると思います:(?=\$this->call\(')(\.){1}(?=',)

なぜ1期間に限定されないのですか?

4

3 に答える 3

2

あなたが探しているのは単純です:

 '[^.]+?[.][^.]+?'

これは、ドットが続く任意の数の非ドットと、いくつかの非ドットを意味します。

さらに良いことに、もう少し正確に:

  '\w+?([.]\w+?)?'

これは、英数字とドットに一致します。後半(はオプション)?

(あなた(\.){1}はただ1つの期間に一致するでしょう。)

于 2012-10-30T23:20:30.307 に答える
1

以下が機能するはずです。名前空間は最初のキャプチャグループに含まれます。

\$this->call\('([^'.]*\.[^'.]*)',

ルックビハインド/ルックアヘッドを使用して、名前空間が正規表現と一致する文字列の唯一の部分になるようにする場合は、次を使用できます。

(?<=\$this->call\(')[^'.]*\.[^'.]*(?=',)
于 2012-10-30T23:21:51.907 に答える
0

これは安全な正規表現です。

\$this\s*\-\>\s*call\s*\(\s*[\'\"]\.[\'\"]

次のような言語文字間の空白を考慮します。

$this ->   call ( '.'

それでも技術的に正しい構文です。さらに、これは最初のパラメータとして一重引用符または二重引用符で囲まれた文字列とは無関係です。

于 2012-10-30T23:25:55.727 に答える