0

私は常に正規表現で ^ と # like 'verb' in は ^a のように、行頭が a か #a で行末が a である必要があると考えていました。この場合、a は動詞 '^' の目的語です。

これについてもっと良い説明をくれる人はいますか?

4

2 に答える 2

1

私はここで手足を出していますが、あなたは実際に^$空の行に一致する理由を尋ねたいと思っていると思います.

これを理解するための鍵は、正規表現が一致するすべてが実際に文字(または複数の文字) である必要はなく、文字列内の位置であってもよいということです。位置に一致する正規表現トークンは、「アンカー」または「アサーション」と呼ばれます。実際にはテキストを消費するのではなく、現在の正規表現エンジンが文字列内の特定の位置にあることを確認するだけです。

したがって、たとえば、^正規表現エンジンが現在文字列の先頭にある場合に一致します。状況によっては、現在の設定によっては、現在のの先頭でも一致する場合があります。いずれにせよ、最初の文字の前に一致します。

同様に$、文字列 (または行) の末尾に一致します。より正確には、終了改行があればその前に一致します。

したがって、^$文字列/行の先頭と文字列/行の末尾の間に文字がない場合にのみ一致します。

于 2012-05-19T20:18:34.977 に答える
0

私はあなたが混同#しているという仮定の下で働いています$

^$行のリテラルの先頭とリテラルの末尾に一致します。最後の文字または最初の文字ではありません。また、最後の文字または最初の文字が機能する必要はありません。

なぜこれが欲しいのですか?たとえば、いくつかの長い行があり、それぞれの末尾にテキストを追加したいとします。「Bork Bork Bork」を検索して置換する置換を実行できます$(たとえば、encheferizer を作成している場合)。または、カンマ区切りリストの最後のメンバーを見つけることができます[^,]+$

前述のように検索式を使用して空の行に一致させることも、または何か^$を検索して、行に不正な文字がないことを確認することもできます。^[\w\d]*$

于 2012-05-19T20:19:47.367 に答える