回答:
次の正規表現をグローバルに使用できます。
\[(.*?)\]
説明:
\[
:[
はメタ文字であり、文字どおりに一致させたい場合はエスケープする必要があります。(.*?)
:貪欲ではない方法ですべてを照合し、キャプチャします。\]
:]
はメタ文字であり、文字どおりに一致させたい場合はエスケープする必要があります。[
]
出力(結果)から除外する方法は?
(?<=\[).+?(?=\])
ブラケットなしでコンテンツをキャプチャします
(?<=\[)
-前向きな後読み [
.*?
-コンテンツの貪欲でない一致
(?=\])
-前向きな先読み ]
編集:ネストされたブラケットの場合、以下の正規表現が機能するはずです:
(\[(?:\[??[^\[]*?\]))
.
します...
これは大丈夫です:
\[([^]]+)\]
ブラケットはネストできますか?
そうでない場合:\[([^]]+)\]
角括弧を含む1つのアイテムと一致します。後方参照\1
には、一致するアイテムが含まれます。正規表現フレーバーがルックアラウンドをサポートしている場合は、
(?<=\[)[^]]+(?=\])
これは、括弧内のアイテムにのみ一致します。
/g
JavaScriptでフラグを使用することにより)。
大括弧を一致に含めたくない場合は、以下が正規表現です。 (?<=\[).*?(?=\])
は.
、行末記号を除くすべての文字に一致します。これ?=
は前向きな先読みです。正の先読みは、特定の文字列が後に来るときに文字列を見つけます。?<=
ある正の後読み。肯定的な後読みは、特定の文字列の前にある文字列を見つけます。これを引用すると、
ポジティブな先読み(?=)
式Bが続く式Aを見つけます。
A(?=B)
ポジティブの後ろを見る(?<=)
式Bが先行する式Aを見つけます。
(?<=B)A
正規表現エンジンが先読みと後読みをサポートしていない場合は、正規表現\[(.*?)\]
を使用してグループ内の大括弧の内部をキャプチャし、必要に応じてグループを操作できます。
括弧はグループ内の文字をキャプチャします。.*?
(あなたが持っていない限り行ターミネータを除き、括弧の間のすべての文字を取得s
フラグが有効になって)貪欲ではない方法で。
(?<=\[).*?(?=\])
上記の説明に従って正常に動作します。Pythonの例を次に示します。
import re
str = "Pagination.go('formPagination_bottom',2,'Page',true,'1',null,'2013')"
re.search('(?<=\[).*?(?=\])', str).group()
"'formPagination_bottom',2,'Page',true,'1',null,'2013'"
[]
ではなく角括弧()に関するものでした。
万が一、不均衡な括弧があったかもしれませんが、次のような再帰を使用して式を設計できます。
\[(([^\]\[]+)|(?R))*+\]
もちろん、使用している言語やRegExエンジンに関連しています。
それ以外、
\[([^\]\[\r\n]*)\]
または、
(?<=\[)[^\]\[\r\n]*(?=\])
探索するのに適したオプションです。
式を簡略化/変更/探索する場合は、regex101.comの右上のパネルで説明されています。必要に応じて、このリンクで、サンプル入力とどのように一致するかを確認することもできます。
jex.imは正規表現を視覚化します。
const regex = /\[([^\]\[\r\n]*)\]/gm;
const str = `This is a [sample] string with [some] special words. [another one]
This is a [sample string with [some special words. [another one
This is a [sample[sample]] string with [[some][some]] special words. [[another one]]`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
([[][a-z \s]+[]])
上記は次の説明があればうまくいくはずです
角かっこ内の文字[]は、文字クラスを定義します。これは、パターンが角かっこ内で言及された少なくとも1つの文字と一致する必要があることを意味します
\ sはスペースを指定します
+は、前述の文字の少なくとも1つを+に意味します。
A-Z
は、パターンに追加する必要があります:([[][a-zA-Z \s]+[]])
; \
文字列マーク( "と ')で定義する正規表現パターンで、"または'の使用法でバックスラッシュ処理によって初心者を混合しながら、それは良い方法だと思います!
std::regex pattern{R"(["][a-zA-Z \s]+["])"};
Rでは、次のことを試してください。
x <- 'foo[bar]baz'
str_replace(x, ".*?\\[(.*?)\\].*", "\\1")
[1] "bar"
gsub(pat, "\\1", x, perl=TRUE)
、指定しpat
た正規表現は..
部分文字列と一致するようにとの最初 [
と最後に ]
、あなたが使用することができます
\[.*\] # Including open/close brackets
\[(.*)\] # Excluding open/close brackets (using a capturing group)
(?<=\[).*(?=\]) # Excluding open/close brackets (using lookarounds)
正規表現のデモと正規表現のデモ#2を参照してください。
次の式を使用して、最も近い角括弧の間の文字列を照合します。
ブラケットを含む:
\[[^][]*]
-PCRE、Python re
/regex
、.NET、Golang、POSIX(grepを、セッド、bashの)\[[^\][]*]
-ECMAScript(JavaScript、C ++ std::regex
、VBA RegExp
)\[[^\]\[]*]
-Java正規表現\[[^\]\[]*\]
-Onigmo(Ruby、どこにでもブラケットをエスケープする必要があります)括弧を除く:
(?<=\[)[^][]*(?=])
- PCRE、パイソンre
/ regex
、.NET(C#の、等)、ICU(R stringr
)、JGSoftソフトウェア\[([^][]*)]
- バッシュ、Golang - キャプチャ下記参照も、エスケープ括弧一対の角括弧の間の内容を\[([^\][]*)]
- JavaScriptの、C ++std::regex
、VBARegExp
(?<=\[)[^\]\[]*(?=])
-Java正規表現(?<=\[)[^\]\[]*(?=\])
-Onigmo(Ruby、どこにでもブラケットをエスケープする必要があります)注:*
0個以上の文字に一致します。+
文字に一致します。結果のリスト/配列で空の文字列が一致しないようにするには、1個以上の一致します。
両方のルックアラウンドサポートが利用可能な場合は常に、上記のソリューションはそれらに依存して、先頭/末尾の開閉ブラケットを除外します。それ以外の場合は、キャプチャグループに依存します(一部の言語の最も一般的なソリューションへのリンクが提供されています)。
ネストされた括弧を照合する必要がある場合は、正規表現で解決策を見てバランスのとれた括弧のスレッドを照合し、丸括弧を角括弧に置き換えて必要な機能を得ることができます。開閉ブラケットを除いたコンテンツにアクセスするには、キャプチャグループを使用する必要があります。
\[((?:[^][]++|(?R))*)]
- PHP PCRE\[((?>[^][]+|(?<o>)\[|(?<-o>]))*)]
- .NETデモ\[(?:[^\]\[]++|(\g<0>))*\]
- Onigmo(ルビー)のデモ
[^]]
貪欲でない(?
)よりも高速に使用でき、貪欲でないことをサポートしない正規表現フレーバーでも機能します。ただし、貪欲でない方が見栄えが良くなります。