1

文字列を。で解析していますTRegExpr。式は次のようになります。

(.*$)

文字列全体を検索する必要があることを意味しますが、コマンドを使用して検索した後、空の文字列を検索しますが、記号ExecNextのために行はすでに終了しています。$

誰かがそのような行動を説明できますか?

4

2 に答える 2

2

デフォルトでは、正規表現.(ドット)は改行と一致しません。入力に改行がある場合は、この動作が表示されます。

これを試して:

(?s)(.*$)

(?s)は、正規表現の残りの部分で「ドットが改行に一致する」をオンにします。

于 2012-10-01T12:49:53.667 に答える
2

*それは数量詞のせいです。前の文字の0回以上の出現に一致します。0 Occurrencesは、空の文字列と一致することを意味します。

$アンカー、ゼロ幅アサーション文字列の終わりとは一致しません。文字列の終わりの前(または文字列の最後の文字である改行の前)の位置と一致します。

では、どうなりますか?

  1. 正規表現は、最初は文字列から最後まで一致します。

  2. 正規表現エンジンの位置は、最後の文字の後ですが、文字列の終わりの前です。ここで呼び出すとExecNext、文字列の終わりの前の空の文字列と一致します。

これを回避したい場合は、+数量詞を使用してください。一致するには少なくとも1文字が必要です==>一致.+$するものは1つだけです。

于 2012-10-01T12:50:58.047 に答える