2011-08-06 8 views

答えて

3
String test = "# Command\n\nFirst line of interest\r\nSecond line of interest\n\r\nThird line of interest\r\n\n"; 
System.out.printf("%n>>%s<<%n", test); 

Pattern p = Pattern.compile("^(?!#).+(?:[\r\n]+.+)*", Pattern.MULTILINE); 
Matcher m = p.matcher(test); 
if (m.find()) 
{ 
    System.out.printf("%n>>%s<<%n", m.group()); 
} 

出力:試合が始まらない最初の行の先頭(MULTILINEモードで^)から始まり

>># Command 

First line of interest 
Second line of interest 

Third line of interest 

<< 

 

>>First line of interest 
Second line of interest 

Third line of interest<< 

ハッシュ記号((.+,ではなく、.*)以外の文字が含まれている場合は、になります。

[\r\n]+は、彼らがUNIX(\n)、DOS(\r\n)、またはセパレータの旧マック(\r)スタイルを問わず、一つ以上の行区切りにマッチします。コードがどのプラットフォーム上で実行されているかにかかわらず、さまざまな行区切りの一部またはすべてを処理するように常に準備されている必要があります。

(?:[\r\n]+.+)*は、後続の行区切り文字に一致することなく、0行以上の追加行と一致します。

+0

+1 +1私のはるかに洗練されたラインのセパレータ –

3

あなたが提供してきた例では、私はあなたがあなたのユースケースには、この正規表現を転送することを願って、非常に基本的なものです:

((?mi)First.*interest\b) 

説明:

(
(?mi) // Use DOTALL and MULTILINE mode 
First // First word you are interested in 
.*  // Any character... 
interest // ..up to the last word you are interested in 
\b  // Word boundary to stop there 
) 

(?mi)が動作しない場合は、 java.util.regex.Patternに記載されているフラグを使用してください。正規表現で遊んする

、正規表現は、このように、マッチングされて何を示しているエディタを持っていることは常に良いです:http://myregexp.com/signedJar.html

+0

オンライン正規表現エディタ – talnicolas

0

使用

Pattern.compile("(?<=# Command\\n\\n)[^\\n].*[^\\n](?=\\n*)", Pattern.DOTALL) 

私は確認されませんでした関心のある行の前のテキストがどのようにリテラルになっていたかを知るために、私は肯定的なlookbehindをハードコードしました。必要に応じて変更することができます。

関連する問題