@matches = ($filestr =~ /^[0-9]+\. (.+\n)*/mg);
私はfilestrに読み込まれたファイルを持っていますが、何らかの理由で上記の正規表現は行の先頭に一致し、その後に数字、ドット、空白、その後に改行が続く任意の数の行(改行のみの行がある場合に終了する)は、ファイルからいくつかの単一の行を生成するように見えます。なぜこのperlの正規表現は動作しません
私は
@matches = ($filestr =~ /^[0-9]+\. .+\n/mg);
ような何かをするとき、私は正しく、単一の行に一致します。私はこの
@matches = ($filestr =~ /^[0-9]+\. .+\n.+\n/mg);
は、私はいくつかの一見無関係に見えるラインに続いて、同じ単一の行と一致しない
。私の正規表現で何が間違っていますか?
注:正規表現はこの正規表現テスターで正常に動作します:https://regex101.com/、それはperlでは動作しません。
例、本書に:
1. This should
match
2. This should too
3. This
one
also
正規表現が一致しなければならない
1. This should
match
と
2. This should too
と
3. This
one
also
だけFYI:改行が遊びに来たときに、代わりに '' \のN 'の\のR'を使用することを検討してください。しかし、ここでは全体的なアプローチを変更し、後続の行ごとに行単位でチェックする方がよいでしょう。 –
提案していただきありがとうございます。私は\ Rを試しましたが、\ nと同じ結果が得られます。 –
提案した方法で行ごとにチェックする良い方法を知っていますか?私は本質的に手動で正規表現を分割するように思えます。最初に^ [0-9] + \と一致する行があるかどうかを確認します。最初の行の残りの部分とそれに続くすべての行に一致する行があるかどうかをチェックします(1つの改行がある行があるまで、再起動する必要があります)。 –