1

すべての IP アドレスのテキストをフィルタリングする正規表現があります。しかし、問題があります!前のテキストを除いて、関連のないすべてのテキストを取得します。たとえば、まず次の Web サイトを使用します。

http://myregexp.com/signedJar.html

正規表現を作成します。

(?<=[0-9]{1,4}+\.[0-9]{1,4}+\.[0-9]{1,4}+\.[0-9]{1,4}+)([[^\n][\n]](?![0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+))*[[^\n]\n]

入力を行います:

このテキストは 1.1.1.1 では選択されませんが、この t 4.55.62.1 ext の残りの 2.2.22.345 は 32.4.3.1 で問題なく選択されます

次のように表示されます。 http://i.imgur.com/LzZWl.png

だから私の質問は、「このテキストは選択されません」を選択するための最良の方法は何ですか? (または最初の IP の前にある任意のテキスト)

4

3 に答える 3

1

あなたはこの仕事を必要以上に難しくしていると思います。すべての IP アドレスを取得したいだけなら、それらを直接照合してみませんか? 例えば:

List<String> matchList = new ArrayList<String>();

Pattern p = Pattern.compile("\\b(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\b");
Matcher m = p.matcher(s);
while (m.find()) {
    matchList.add(m.group());
} 
于 2012-08-04T02:02:06.407 に答える
0

思いついた!非常に簡単な解決策は、文字列の先頭に1.1.1.1を追加してから、正規表現の分割によって返された最初のIPを無視することです(godspeedleeによって提案された分割-回答を追加してこれに対する投票を要求する場合は、受け入れます)。

于 2012-08-03T22:44:42.090 に答える
-1

これ: ?<=

は非キャプチャ グループを意味します。これを削除して、何が選択されているかを確認してください。

于 2012-08-03T21:07:52.830 に答える