2011-10-28 7 views
2

値の後に2つの引用符の間にどのように値を取得しますか?2つの引用符の間の文字列を取得します

ので、value="hi my name is bob" />
は返します:hi my name is bob
またはvalue="Ouch! "that hurt" lol..." />
を返します:Ouch! "that hurt" lol...

私はvalue=" TEXT_HERE " />が常に発生します知っていると私はそれの中の文字列をしたいです。はい、いつも最後に/>の前にスペースがあります。私は解析しているHTMLコードですが、このフィールドを除いてすべてを正しく解析しています。

EDIT少し明確にしましょう。 Webdriverを使ってページを解析しているので、HTMLを文字列にスローした後、そのデータから「値」タグを解析しようとすると、実際にはサイドツールを使用できません。
したがって、正規表現コードはあらゆる種類のコーディングを操作し、値フィールドが何であれ取得する必要があります。そして私はすべての価値のフィールドのデータが必要です。

+2

あなたは(http://stackoverflow.com [正規表現を使用して、解析HTML]にしようとしていません/ questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags)は間違いありませんか? –

+0

htmlに出力すると、"を試してみますが、これはJavaについてのものではありません – sergtk

+0

有効なHTMLであれば、 'value =" Ouch! "は" lol ... "/>' 'value =" Ouch!"これは痛いです" lol ... "/>'(内側の引用符をエスケープする必要があります)。 – Briguy37

答えて

5

を使用して、"の最初のオカレンスを検索することができます。最初のオカレンスインデックスを保存し、String.lastIndexOf()を使用して最後のオカレンスインデックスを取得し、String.substring()を呼び出して、必要な部分文字列を取得します。

+0

しかし、HTMLでは、属性を一重引用符で囲むこともできます。 –

+0

2番目(無効な入力?)のテストケースに合格しません。 –

+0

ああ、私は何とかそれを逃した。コメントが編集されました。 –

0

regexを使用して引用符の間の値を取得したり、文/文全体の値を保持する文字列を扱うことができます。あなたはすべてを置き換えるためにString.replaceAllメソッドを使用することができる。例えば

'"' ''(空のスペース)と(引用符)一般的に

0

:。

echo 'value="hi my name is bob" />' | perl -nle 'm{value="\s*([^"]*)} and print $1' 
+0

これはJavaの質問です。 –

+0

@G_H>これはJavaの質問です。はい、それは私が最初にそれを見たときにそのようにタグ付けされていませんでした。もしそうなら、私はそれを逃した。 – JRFerguson

+0

また、2番目の(無効な入力ですか?)テストケースに失敗します;-) –

3

あなたがHTMLを解析している場合。私はあなたの仕事を容易にするためにjsoupのようなJavaライブラリを使用することをお勧め

+0

+1の音声理由の理由 –

0

をここでJavaがあなたのために働くだろういくつかのJavaコードと正規表現パターンです:

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

Pattern pattern = Pattern.compile("[\\d\\w\\s'\"]+\\z"); 
Matcher matcher = pattern.matcher("value=\"hi my name is bob\""); 

while (matcher.find()) { 
    System.out.print("found:'"+matcher.group()+"'"); 
} 
枚の

プリント...

が見つから:あなたは\で、あなたの文字列で引用符をエスケープする必要があります

「『こんにちは私の名前はボブです』」。

+0

ザポニーは来るのですか? – ZimSystem

+2

̡̡̡̡̢̢̢̢̢̢̼͍͍̩̼͍͍̩̹̼̝͉̙̻̹̼̝͉̙̻͔̰̗͈͔̰̗͈͔̰̗͈͔̰̗͈̼̗̣͎̗̼̗̣͎̗̼̗̣͎̗̼̗̣͎̗̼̗̣͎̗̼̗̣͎̗̼̗̣͎̗̼̗̣͎̗̼̗̣͎̗̼̗̣͎̗̼̗̣͎̗̼̗̣͎̗̼̗̣͎̗̼̗̣͎̗̼̗̣͎̗̘̝̞̜̹̣̹̭̘̝̞̜̹̣̹̭̘̝̞̜̹̣̹̭̘̝̞̜̹̣̹̭̘̝̞̜̹̣̹̭͓͙͓͙͓͙͓͙͓͙͇̮͍̼̦̪̭͇̮͍̼̦̪̭͇̮͍̼̦̪̭͇̮͍̼̦̪̭͇̮͍̼̦̪̭͇̮͍̼̦̪̭̐͋̄̈̐͋̄̈̋̈͛ͮ̈͒̾̋̈͛ͮ̈͒̾̊͊̽ͫͣ̊͊̽ͫͣ̊͊̽ͫͣ̊͊̽ͫͣͫͤͫͤͫͤͫͤͫͤͫͤͫͤͫͤͫͤͫͤͫͤͫͤͫͤͫͤͫͤ̔͊̍̋̏̿͌̔͊̍̋̏̿͌̔͊̍̋̏̿͌̔͊̍̋̏̿͌̔͊̍̋̏̿͌̅ͫ̅ͫ̅ͫ̅ͫ̅ͫ͛̉ͧ̏͛̉ͧ̏͛̉ͧ̏͛̉ͧ̏͛̉ͧ̏͛̉ͧ̏̚̚̚̚͘͘͘͘͘͢͢͢͢͢͞͞͞͞͞͞͞͞͞͞͞͞͞͞͞͠͠͠͠͠ –

1

XPathを使用することをお勧めします。ここでトラックにあなたを取得する必要があります例です。


import java.io.ByteArrayInputStream; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.xpath.XPath; 
import javax.xml.xpath.XPathConstants; 
import javax.xml.xpath.XPathExpression; 
import javax.xml.xpath.XPathFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.NodeList; 

public class Test { 
    public static void main(String[] args) throws Exception { 
    String s = "" 
     + "<?xml version=\"1.0\"?>" 
     + "<root>" 
     + " <a value=\"hello\" />" 
     + " <b value=\'hello\' />" 
     + " <c value=\"hello &quot;bob&quot;\" />" 
     + "</root>"; 
    ByteArrayInputStream bis = new ByteArrayInputStream(s.getBytes()); 

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
    Document d = builder.parse(bis); 
    XPathFactory xpf = XPathFactory.newInstance(); 
    XPath xpath = xpf.newXPath(); 
    XPathExpression xpe = xpath.compile("//@value"); 
    NodeList nl = (NodeList)xpe.evaluate(d, XPathConstants.NODESET); 

    for (int i = 0; i < nl.getLength(); i++) { 
     System.out.println(nl.item(i).getNodeValue()); 
    } 
    } 
} 

出力は次のとおりです。


hello 
hello 
hello "bob" 
関連する問題