どのように使用を正規表現を無視する文字列が含まれる特定の部分文字列?

StackOverflow https://stackoverflow.com/questions/530441

  •  22-08-2019
  •  | 
  •  

質問

方法を教えてくださいくのを否定後読み(またはその他の方法)正規表現を無視する文字列を含む特定の部分文字列?

私は読み取り調stackoverflowの質問:
java正規表現のためのファイル-フィルタリング
正規表現にマッチ戦-もの-これは-非特異部分文字列

その ほぼ だいたい...私の問題は、文字列の終わらないとしたいことは無視します。なかったことは問題にならないはずである。

思いことlookaroundsは幅ゼロのものがマッチングを通の文字列...かなものの内部.

とにかく人がいれば、喜んでの時間を説明しますので大幅なくてはならないものです。

ここでは一例ですが入力した文字列としたいを無視する:

192.168.1.10の--[08日/2009:16:33:54 -0800] "GET/FOO/BAR/HTTP/1.1"200 2246

ここでは一例ですが入力した文字列にいきたいと思いま評価:

192.168.1.10の--[08日/2009:16:33:54 -0800] "GET/FOO/BAR/content.js HTTP/1.1"200 2246

の鍵だと思いたい、と願っていることだと思うなHTTP取得することは、その後のドキュメントルートからデフォルトのページです。

以下が私は少し試験用ハーネスのRegEx思っています。

public static void main(String[] args){
String inString = "192.168.1.10 - - [08/Feb/2009:16:33:54 -0800] \"GET /FOO/BAR/ HTTP/1.1\" 200 2246";
//String inString = "192.168.1.10 - - [08/Feb/2009:16:33:54 -0800] \"GET /FOO/BAR/content.js HTTP/1.1\" 200 2246";
//String inString = "192.168.1.10 - - [08/Feb/2009:16:33:54 -0800] \"GET /FOO/BAR/content.js HTTP/"; // This works
//String inString = "192.168.1.10 - - [08/Feb/2009:16:33:54 -0800] \"GET /FOO/BAR/ HTTP/"; // This works
String inRegEx = "^.*(?:GET).*$(?<!.?/ HTTP/)";
try {
  Pattern pattern = Pattern.compile(inRegEx);

  Matcher matcher = pattern.matcher(inString);

  if (matcher.find()) {
    System.out.printf("I found the text \"%s\" starting at " +
"index %d and ending at index %d.%n",
matcher.group(), matcher.start(), matcher.end());
  } else {
    System.out.printf("No match found.%n");
  }
} catch (PatternSyntaxException pse) {
  System.out.println("Invalid RegEx: " + inRegEx);
  pse.printStackTrace();
}
}
役に立ちましたか?

解決

あなただけの/で終わっていない任意のパスにマッチでした。

String inRegEx = "^.* \"GET (.*[^/]) HTTP/.*$";
<時間>

これはまた、使用して行うことができます。の否定後読み

String inRegEx = "^.* \"GET (.+)(?<!/) HTTP/.*$";

ここで、(?<!/)

。 "の前ののシーケンス必要があります。のないのマッチ/" と言います

他のヒント

たぶん、私はここで何かが欠けているんだけど、あなただけの任意の正規表現なしで行くと、これが真であるために何を無視することができませんでした。

string.contains("/ HTTP")

ファイルパスがスラッシュで終わることは決してありませんので。

私はこのようなものを使用することになります:

"\"GET /FOO/BAR/[^ ]+ HTTP/1\.[01]\""

これは単なる/FOO/BAR/ではありませんすべてのパスと一致します。

を書いていてRegexこの複合体でおすすめビルには、図書室の資源外StackOverflow.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top