1

2つのマーカー間の文字列をキャプチャするための最短の解決策は何でしょうか?

たとえば、私が持っていると想像してみましょう

blahblahblah --- foobar-- blahblahblah

そして、「foobar」をキャプチャしたいと思います。

文字列「---foobar--」は正規表現で非常に簡単にキャプチャできます。

しかし、接頭辞「---」と接尾辞「-」は必要ないので、結果をクリーンアップするために多くの手順が必要です。

  1. プレフィックス「---」の位置を取得します(すでにブロックをキャプチャしているため、位置が0であることがわかります)
  2. 「---」の長さを取得します(例として、リミッターのサイズがわからないと仮定します。「---」、「-」、「-」のいずれかになります)
  3. 位置position_prefix+prefix_lengthで始まる、接尾辞「-」の位置を取得します
  4. position_prefix+prefix_lengthとposition_suffixの間のサブストリング

もちろん、必要に応じてそのような関数を自分で作成することもできますが、そのための組み込みソリューションはすでにありますか?

CaptureWithoutDelimiters(group_regex、prefix_regex、suffix_regex)のようなものですか?

4

2 に答える 2

3

どうですか:

[\w\s]+-+(\w+)-+[\w\s]+

次に、最初のキャプチャグループによってキャッチされたものを印刷できます。

説明:

[\w\s]+     // Match at lest 1 letter or white space character
-+          // Followed by at least 1 marker character
(\w+)       // Capture the word inside the markers
-+          // Followed by more marker characters
[\w\s]+     // Followed by at lest 1 letter/white space character
于 2012-11-08T13:50:09.397 に答える
1

最短の解決策はおそらく

.split("-+")[1]

---プレフィックスおよび--ポストフィックスとして必要であり-、テキスト内の任意の場所を許可する場合、分割ソリューションは次のようになります。

.split("---")[1].split("--")[0]

このデモを参照してください。

于 2012-11-08T14:26:17.287 に答える