1

私は正規表現が初めてで、この単純なタスクを実行するのはかなり難しいと感じています。文字列全体は次のようになります

debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug1: Next authentication method: publickey
debug1: read PEM private key done: type RSA
debug1: Enabling compression at level 6.
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: Sending subsystem: sftp
Can't ls: "/home/dev/customer/*.out" not found
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 2 clearing O_NONBLOCK
debug1: Transferred: stdin 0, stdout 0, stderr 0 bytes in 0.1 seconds
debug1: Bytes per second: stdin 0.0, stdout 0.0, stderr 0.0
debug1: Exit status 0
debug1: compress outgoing: raw data 343, compressed 184, factor 0.54
debug1: compress incoming: raw data 860, compressed 430, factor 0.50

*.out/text" not foundこの文字列に次のようなものが存在するかどうかを確認するだけです。この場合は存在しますが、出力が真ではありません

私が使用する正規表現は.*\*\..*" not found.*機能しません。誰でも助けてもらえますか?

4

3 に答える 3

0

文字列一致を使用する

このための正規表現は実際には必要ありません。単純な文字列の一致は問題なく機能し、さらに高速になります。例えば:

$ fgrep '.out" not found' /tmp/foo
Can't ls: "/home/dev/customer/*.out" not found

本当に正規表現が必要な場合

主張する場合は正規表現を使用できますが、ユースケースではこれ以上うまく機能しません。それでも、ここにあります:

$ egrep '\.out" not found' /tmp/foo
Can't ls: "/home/dev/customer/*.out" not found

正規表現の秘訣は、正規表現トークンを使用して行全体を作成するのではなく、正しい一致を保証するために必要最小限のテキストだけを一致させることです。このような場合はシンプルな方が良いです。

于 2012-08-18T14:25:49.010 に答える
0
import java.util.regex.*;

class Main
{
  public static void main (String[] args) throws java.lang.Exception
  {
    java.io.BufferedReader in = new java.io.BufferedReader (new java.io.InputStreamReader (System.in));
    String input = "";
    String s;
    while ((s = in.readLine()) != null && s.length() != 0) input += s;
    Pattern pattern = Pattern.compile("\\*\\.(?:out|text)\\\"\\s+not\\sfound");
    Matcher  matcher = pattern.matcher(input);
    if (matcher.find())
      System.out.println("Match found");
  }
}

このコードをここでテストします。

于 2012-08-18T15:23:43.370 に答える
-1

これは、単一行モードだけでなく複数行モードでも機能します

(^.*?|.*?)\.(out|text).*?not found(.*?|.*?$)
于 2012-08-18T14:41:06.813 に答える