Dev_noob:
私はこのHackerrankの問題に遭遇してきたし、正規表現は、HTMLタグの間の文字列と一致する必要があります。正規表現と文字列があります
String str="<h1>Hello World!</h1>";
String regex="<(.+)>([^<]+)</\\1>";
また、何strが'のように複数のHTMLタグを持っている場合String str="<h1><h1>Hello World!</h1></h1>"
、どのように([^<]+)
キャッチこの「STR」。
私の質問はどのようにある([^<]+)
「STR」にマッチしていません([a-zA-Z]+)
。
ここでは完全なソースコードの場合:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/* Solution assumes we can't have the symbol "<" as text between tags */
public class Solution{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int testCases = Integer.parseInt(scan.nextLine());
while (testCases-- > 0) {
String line = scan.nextLine();
boolean matchFound = false;
Pattern r = Pattern.compile(regex);
Matcher m = r.matcher(line);
while (m.find()) {
System.out.println(m.group(2));
matchFound = true;
}
if ( ! matchFound) {
System.out.println("None");
}
}
}
}
私はこの質問をする愚かだと事前にあなたに感謝している場合気にしないでください!
マッド物理学者:
この正規表現の保証、あなたの文字列が唯一うまく形成されたHTMLの入力を想定し、1個のタグが含まれていること。
初期には、<(.+)>
あなたのタグの名前をキャプチャします。キャプチャグループはまた、それができる任意の属性を取得します。以来+
貪欲数量詞でそれができるならば、それは複数のタグをキャプチャします。
後続の</\\1>
第一のグループは、捕捉何に対してマッチ。あなたのHTMLがうまく形成されている場合、式は属性を持つ複数のタグまたはタグをキャプチャしません理由です。
- タグを開く
<h1>
、タグを閉じ</h1>
✓ - タグを開く
<h1 attr="value">
、タグを閉じ</h1>
ますが、期待して</h1 attr="value">
- タグを開く
<h1><h2>
、タグを閉じ</h2></h1>
ますが、期待して</h1><h2>
タグはとのmatchすることができた理由です.+
内容はと一致しなければならない一方で、かなり安全に[^<]+
。あなたは、コンテンツ内の任意の滞在タグをつかむないことを確認したいのですが、すべての他の文字は許可されています。[^<]+
(発音。「ではない<
、少なくとも1回)のようなものができます!
しばらく、[A-za-z]
確かではないだろうが。