6

私はこのサイトとネット(http://www.regular-expressions.info/brackets.htmlhttp://www.asiteaboutnothing.net/regexp/など)でキャプチャされていないグループに関するいくつかの記事を読んでいます。 regex-disambiguation.html「?:^」正規表現はどういう意味ですか?非キャプチャグループとは何ですか?疑問符の後にコロン(?:)が続くとはどういう意味ですか?

(?:foo)の意味は明らかです。私がよくわからないのは(?= foo)です。(?= foo)も常に非キャプチャグループですか、それとも依存しますか?

4

3 に答える 3

10

いいえ、(?=foo)キャプチャしません"foo"。ルックアラウンド アサーション (ネガティブおよびポジティブ ルック アヘッド アンド ビハインド) はキャプチャせず、テキストの存在 (または不在) のみをチェックします。

たとえば、正規表現は次のとおりです。

(X(?=\d+))

"X"その後に 1 つ以上の数字がある場合にのみ一致します。ただし、これらの数字は一致グループ 1 の一部ではありません。

ルックアヘッドでキャプチャを定義してキャプチャできます。たとえば、正規表現は次のとおりです。

(X(?=(\d+)))

"X"その後に 1 つ以上の数字がある場合にのみ一致します。そして、これらの数字は一致グループ 2 でキャプチャされます。

PHP デモ:

<?php
$s = 'X123';
preg_match_all('/(X(?=(\d+)))/', $s, $matches);
print_r($matches);
?>

印刷されます:

配列
(
    [0] => 配列
        (
            [0] => X
        )

    [1] => 配列
        (
            [0] => X
        )

    [2] => 配列
        (
            [0] => 123
        )

)
于 2012-07-11T15:06:55.427 に答える
6

Lookarounds are always non-capturing and zero-width.

于 2012-07-11T15:00:57.297 に答える
2

で始まるすべてのグループ?は非キャプチャになりますが(?:foo)、通常のグループとしてのみ機能します。

于 2012-07-11T15:01:19.313 に答える