2011-12-22 11 views
0

最初の出現が見つかるまで一致するようにしようとしていますが、誰かがこれを理解するのを助けることができればうまくいかないようです。regex:最初の文字が見つかるまで一致します

私は反対に一致していた文字列:

[plugin:tabs][tab title="test"]Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam sit amet nisl nisl. Ut interdum libero vitae quam ultricies et lacinia elit aliquet. Praesent tincidunt, sem tempus feugiat feugiat, turpis tellus scelerisque erat, sit amet feugiat neque arcu ac lectus. Sed at mi et elit interdum scelerisque vitae eu felis.[/tab][/plugin] 

それが一致する必要がありますどのような:

[plugin:tabs] 

を、それがマッチングを保つ何:

[plugin:tabs][tab title="test"] 

正規表現:

(\[plugin:(?<identifier>[^\s]+)(?<parameters>.*?)\]) 

EDIT:それも一致している必要がありますどのような :

[plugin:tabs test="test"] 
+1

'[^ \ s](空白以外の文字)の代わりに' \ w'(単語文字)を使用してもかまいません。 – Gumbo

+0

あなたはどの言語を使用していますか? – JosephRuby

答えて

1

here on Regexr

それを参照してください

(\[plugin:(?<identifier>[^\]\s]+)(?<parameters>.*?)\]) 

ここにこれを試してみてくださいこれが最初という名前のグループ内]文字も空白文字に加えて回避します。

最初のキャプチャグループが必要ない場合は、オープニングブラケットの直後に?:を追加して、キャプチャグループを非キャプチャグループにすることができます。

(?:\[plugin:(?<identifier>[^\]\s]+)(?<parameters>.*?)\]) 

(?:\[plugin:(?<identifier>[^\]\s]+)\s*(?<parameters>.*?)\]) 

lookbehindsをサポートする任意の言語でそれhere on Regexr

+0

2番目のキャプチャグループのinfrontを取り除く方法はありますか? – luastoned

+0

@luastoned私は答えに正規表現を追加しました.2つのグループの間で一致させるだけです。 – stema

+0

私はそれを得る、私は '\]'の後に最初の '\ s'を削除しようとしましたが、うまくいきませんでした! – luastoned

2

あなただけ(怠惰な試合は、できるだけ少ない文字に一致します)ので、同じよう?を追加する必要があります:(?<parameters>.*?)ものの

(\[plugin:(?<identifier>[^\s]+?)(?<parameters>.*?)\]) 
          ^

部分は不要です。

だからあなたの最終的な正規表現は次のようになります。

(\[plugin:(?<identifier>[^\s]+?)\]) 

€のDIT:stemaの答え@を参照してください。

+0

申し訳ありません、パラメータは非常に重要ですが、私の編集した質問 – Christophe

+0

@krikeを参照してください非常に理解していない、あなたはプラグインの名前と 'tab title =" test "' – luastoned

+0

プラグイン名にoptionaly属性はありますが、その後に続く[tab title = "test"]はありません – Christophe

0

を参照してください第二のグループによって捕捉され、間にスペースは、ちょうど2つのグループ間での任意の空白文字と一致していることを回避するために ことあなたの最も簡単な解決策になります。

/(^(?<!])*)/ 
関連する問題