0

わかりました、簡単な質問です。私は Java の初心者で、ページのタイトル タグから人物の名前を取得する必要があります。正規表現は知っていますが、一部の文字をエスケープできません (またはエスケープ方法がわかりません)。

<title>Mr. Somebody | Department in which he's in</title>

したがって、基本的に、「Mr. Somebody」を取得する正規表現が必要です。私はもう試した :

Pattern pat = Pattern.compile("<title>(.+?)|");                               
Matcher mat = pat.matcher(data);
boolean found = false;
while (!found && mat.find()) {
      name = mat.group(0);
      found = true;
}
System.out.println("Found a name : " + name);

私の問題は、何を試しても、最初のキャラクターしか得られなかったということです. indexOf と部分文字列を使用したより単純なアプローチの方が優れていると思いますか、それとも正規表現はまだ実行可能ですか?

通常、正規表現は html タグの解析には適していませんが、タグ全体 (またはタグ内に含まれる可能性のある他のタグ) には関心がないため、この検索は文字列検索に近いと考えています。

どんな種類の助けも大歓迎です:)

4

5 に答える 5

1

正規表現で特別な意味を持つ文字であるため、パイプをエスケープする必要があります。試す:

<title>(.+?)\\|

|<title>(.+?)は「または」を意味します。これは、正規表現がいずれかまたは何も一致しようとしないことを意味します(. の後には何もありません) |

と照合しようとすると、が遅延している<title>(.+?)ため、最初の文字のみが取得されます (可能な限り一致しません)。.+?

または、否定されたクラスを使用できます。

<title>([^\\|]+)

[^\\|]+パイプ以外の任意の文字と一致します。

于 2013-10-05T12:42:52.380 に答える
0

ここに方法があります:

<\s*title[^>]*>\s*([^\|]+)
  • 先頭の空白を取り除きます。
  • 誰かがタイトルタグに追加する可能性のある奇妙な属性を処理します。<title data-cookies="I hide cookies here :P">I like titles</title>
  • タイトルの前に追加された空白を処理します。つまり< title >、まだ有効です。
于 2013-10-05T13:23:57.397 に答える
0

多分これはあなたが望むものです:

(?<=<title>)(.+?(?=[|].+?))(?=.+?</title>)

Mr. Somebody を返します。たとえば、ここでテストできます。

于 2013-10-05T13:17:11.533 に答える