5

正規表現パターンで参照を逆戻りさせる方法はありますか?

入力文字列の例:

Here is "some quoted" text.

引用されたテキストを引き出したいとすると、次の式を作成できます。

"([^"]+)"

この正規表現はに一致しsome quotedます。

一重引用符もサポートしたい場合は、式を次のように変更できます。

["']([^"']+)["']

しかし、入力文字列に引用符が混在している場合Here is 'some quoted" text.、正規表現を一致させたくないと言うとどうなりますか。現在、2番目の例の正規表現は引き続き一致します。

私ができるようにしたいのは、最初の引用符が二重引用符である場合、最後の引用符は二重引用符でなければならないということです。また、開始引用符が一重引用符である場合、終了引用符は一重引用符である必要があります。

これを実現するためにバックリファレンスを使用できますか?


私の他の関連する質問:正規表現を使用して引用符の間にテキストを取得する

4

3 に答える 3

7

正規表現を利用できます。

(["'])[^"']+\1
  • ():グループ化に使用
  • [..]:はcharクラスです。したがって、または同等のものと["'] 一致します"'"|'
  • [^..]:否定付きのcharクラス。後にリストされていない文字と一致します^
  • +:1つ以上の量指定子
  • \1:最初のグループを逆参照する(["'])

これPHPを次のように使用します。

preg_match('#(["\'])[^"\']+\1#',$str)
于 2010-04-27T15:27:30.297 に答える
2
preg_match('/(["\'])([^"\']+)\1/', 'Here is \'quoted text" some quoted text.');

説明:(["'])([^"']+)\1/最初の引用符を括弧で囲みました。これは最初のグループ化であるため、後方参照番号は1です。次に、終了引用符がある場所に\ 1を配置しました。これは、グループ1で一致した文字を意味します。

于 2010-04-27T15:27:26.017 に答える
0

/"\(.*?\)".*?\1/動作するはずですが、正規表現エンジンに依存します

于 2010-04-27T15:25:57.530 に答える