[解決済み] 正規表現「[^][]」とはどういう意味ですか?
質問
以下の正規表現で見つけました。
\[(?:[^][]|(?R))*\]
角括弧(とその内容)と入れ子になった角括弧にマッチします。
解決方法は?
[^][]
を除くすべての文字を意味する文字クラスです。
[
と
]
.
をエスケープしないようにすることができます。
[
と
]
で使用される正規表現エンジンである PCRE にとって曖昧でないため、特別な文字を使用することができます。
preg_
関数を使用することができます。
以来
[^]
は PCRE では正しくないので、正規表現でパースする唯一の方法は
]
が文字クラスの中にある場合は、後で閉じます。同じように
[
に続く。文字クラスを開き直すことはできません(POSIX文字クラスは除く
[:alnum:]
) の中にある文字クラスです。そうすると、最後の
]
は明確で、文字クラスの終わりです。しかし
[
文字クラスの外側は、文字クラスの始まりとしてパースされるため、エスケープする必要があります。
同じように
[]]
または
[[]
または
[^[]
をエスケープせずに
[
または
]
を文字クラスで指定します。
注意: PHP 7.3 以降、文字クラスの内部でも空白文字を無視できる inline xx 修飾を使用することができます。このようにすることで、これらのクラスをよりあいまいでない方法で書くことができます。
(?xx) [^ ][ ] [ ] ] [ [ ] [^ [ ]
.
この構文は、いくつかの正規表現フレーバーで使用できます。PCRE (PHP, R)、Perl、Python、Java、.NET、GO、awk、Tcl ( 中括弧でパターンを区切った場合、Donal Fellowsに感謝します。 ), ...
でも、一緒にはできない。Ruby、JavaScript ( ただし、IE < 9を除く ), ...
m.buettnerさんのご指摘の通りです。
[^]]
が曖昧でないのは
]
は
最初
の文字が含まれています。
[^a]]
と表示されます。
でないものはすべて
a
の後に
]
. を持つには
a
と
]
と書く必要があります。
[^a\]]
または
[^]a]
特にJavaScriptの場合、仕様上
[]
を正規表現トークンとして使用します。
決して
がマッチする(言い換えれば
[]
は必ず失敗します)、そして
[^]
にマッチする正規表現として
任意の文字
. 次に
[^]]
は、次のように見えます。
に続く任意の文字
]
. 実際の実装は様々ですが、最近のブラウザは仕様の定義に従うのが一般的です。
パターンの詳細。
\[ # literal [
(?: # open a non capturing group
[^][] # a character that is not a ] or a [
| # OR
(?R) # the whole pattern (here is the recursion)
)* # repeat zero or more time
\] # a literal ]
このパターンの例では、最後の
]
しかし、このパターンを少し最適化すると、同じことができます。
(を使用)。
(?-1)
)
:
(\[(?:[^][]+|(?-1))*+])
( # open the capturing group
\[ # a literal [
(?: # open a non-capturing group
[^][]+ # all characters but ] or [ one or more time
| # OR
(?-1) # the last opened capturing group (recursion)
# (the capture group where you are)
)*+ # repeat the group zero or more time (possessive)
] # literal ] (no need to escape)
) # close the capturing group
またはそれ以上の
(\[[^][]*(?:(?-1)[^][]*)*+])
を使用することで、交替のコストを回避することができます。
関連
-
[解決済み】MySQLのカラム数が1行目の値数と一致しない【非公開
-
[解決済み] 正規表現で変数を使うには?
-
[解決済み] 正規表現における非捕捉グループとは何ですか?
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] grepによるネガティブマッチング(fooを含まない行にマッチする)
-
[解決済み] 正規表現を使用した電話番号の検証方法
-
[解決済み] JSで文字列が正規表現にマッチするかどうかをチェックする
-
[解決済み] 角括弧の間のテキストを抽出する正規表現
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Weird PHP error: 'Can't use function return value in write context'.
-
[解決済み】予期せぬ例外。SQLSTATE[HY000] [1045] Access denied for user ****@'localhost' (using password: YES)
-
[解決済み】PHP 7.2 - Warning: count(): パラメータは配列かCountableを実装したオブジェクトでなければならない [解決済み]
-
[解決済み] php5パッケージのインストール候補がない (Ubuntu 16.04)
-
[解決済み】Phpのincludeが機能しない? 関数がincludeされない
-
[解決済み] $wpdb->update または $wpdb->insert を実行すると、引用符の前にスラッシュが追加される
-
[解決済み] [Solved] Fatal error: 非オブジェクトのメンバ関数fetch_assoc()の呼び出し [重複]。
-
[解決済み】PHPのクラスが見つからないが、インクルードされている
-
[解決済み】chromeの「net : Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR" は何がおかしいのか?
-
[解決済み] PHP と mod_fcgid: handle_request_ipc 関数で ap_pass_brigade が失敗する。