この肯定的な先読みが太字のテキストと一致しないのはなぜですか? (ない . ではない ->)
[_a-z0-9]+(?=\.|->)[_a-z0-9]+
ヒント6 . ai_flags = 0; // コメント Hints.ai_flags
ヒント6 . ai_family = AF_UNSPEC;
int newsocket = socket(結果-> ai_family ,結果-> ai_socktype ,結果-> ai_protocol );
この肯定的な先読みが太字のテキストと一致しないのはなぜですか? (ない . ではない ->)
[_a-z0-9]+(?=\.|->)[_a-z0-9]+
ヒント6 . ai_flags = 0; // コメント Hints.ai_flags
ヒント6 . ai_family = AF_UNSPEC;
int newsocket = socket(結果-> ai_family ,結果-> ai_socktype ,結果-> ai_protocol );
.
まず、 (.
「何でも」に一致し、「。」に一致させたい)をエスケープする必要があります\.
[奇妙な-誰かが質問を編集してそれを修正しました]
第二に、先読みは先を見据えています-それは何も消費しません。したがって、をエスケープしても.
、[_a-z0-9]+(?=\.|->)
は「ヒント6」のみを消費します(そして、先を見据えて、次の文字が「。」になることを確認します)。その後[_a-z0-9]+
、「。」と一致しません。
私はあなたが何をしようとしているのか本当に理解していません。私が見る限り、[_a-z0-9]+(?:\.|->)[_a-z0-9]+
先読みなしであなたが望むことをするでしょう((?:...)
結果にバインドされないグループ化です)。
一般的に、あなたはただ一致することができるので、あなたは多くの先読みを必要としません。これは主にグループを照合したい場合に使用されますが、何らかの(奇妙な)理由で事前に特定のケースを確認する必要があります。
[編集:] 2つの単語をキャプチャするだけの場合は、を使用します([_a-z0-9]+)(?:\.|->)([_a-z0-9]+)
(単語ごとに1つずつ、2つのグループをキャプチャすることに注意してください)。
[edit2:]これがシンタックスハイライト用の場合は、どちらかの単語をハイライトするものを使用できると思います。説明するよりも表示する方が簡単です。
(?:[_a-z0-9]+(?=(?:\.|->)[_a-z0-9]+)|(?<=[_a-z0-9]+(?:\.|->))[_a-z0-9]+)
これにより、「単語の後に.word」または「単語の前に単語」が強調表示され、ドットを強調表示せずに両方の単語が強調表示されます。それらは2つの別々の一致ですが、構文ハイライトはそれを気にしません(私は推測します)。