2012-02-17 2 views
0

文字列が正確に2行であることを検証する正規表現文を探しています。私は.Net regex syntaxを使用しています。文字列を検証するためのRegex文は正確に2行です

入力文字列全体が含まれていることを確認します。私は表現の始めと終わりに\A\Zのマーカーが必要だと思っています。私もUnicode line boundaries(\r\n|[\n\v\f\r\x85\u2028\u2029])を使用しています。

これまでのところ、私は以下を作成しました。それは期待どおりに動作しません。

\A.+?(\r\n|[\n\v\f\r\x85\u2028\u2029])[^\n\v\f\r\x85\u2028\u2029]+?\1?\Z 

例入力

一致

some line 
other line 

一致

some line 
other line 
this is incorrect input 

行には、最後の行の後にオプションの改行文字を付けることができます。限り、テキストがありません。

+0

ワウ*それは醜い正規表現です。 –

答えて

2
^[^\r\n]+\r\n[^\r\n]+$ 

^ - start of string 
[^\r\n]+ - any character that isn't a CRLF (New line) (1 or more times) 
\r\n - match a CRLF (new line) 
[^\r\n]+ - same as before 
$ - end of string 

ちょうどあなたの最後のビットを読んで、あなたはあなたがあなたの正規表現のオプションでプレイする必要があるとしている

^[^\r\n]+\r\n[^\r\n]+(\r\n)?$ 
+0

あなたのソリューションは私が行ったことに非常に近いです。私はより一般的な '(\ r \ n | [\ n \ v \ f \ r \ x85 \ u2028 \ u2029])で' \ r \ n'を変更しました。 '^'と '$'の代わりに '\ A'と' \ Z'を使用しました。なぜなら文字列全体の開始端をチェックしたいからです。最終的な正規表現は '\ A [^ \ n \ v \ f \ r \ x85 \ u2028 \ u2029] +?(\ r \ n | [\ n \ v \ f \ r \ x85 \ u2028 \ u2029] \ n \ v \ f \ r \ x85 \ u2028 \ u2029] +?\ 1?\ Z'を入力してください。 – Jason

1

と最後にオプションの新しいラインを持つことができますが、最終的にはあなたの正規表現は次のようになります。最後に\n*

@"^[^\n]*\n[^\n]*\n*$"

は、あなたのオプションで改行され

関連する問題