簡體   English   中英

如何使用JAVA正則表達式提取屬性值

[英]how can I exctract attribute value using JAVA regex

我有這樣的字符串:

<a href="https://host-test.com/create?userName=test3&amp;user-mail=myemail@gmail.com&amp;id=14b72820-3855-4f2b-9a39-543ced6784a0&amp;downloadurl=https://host-test.com:443/123/rest/tmp-z7vvymo3wmfzke/vfs/v2/downloadzip/&amp;projectid=d29ya3NwYWNleXFpYXlwZjgwb2sxNDA2MjovY3JlYXRlQWNj:createAcc;" style="font-family:Myriad Pro,arial,tahoma,serif;color:#fff;font-size:14px;text-decoration:none;font-weight:bold" title="Confirm tenant creation" target="_blank">
                            <div style="font-family:'Lucida Grande',sans-serif;border-radius:5px;width:120px;min-height:40px;line-height:40px;border:1px solid #577e15;color:#fff;text-align:center;background:#e77431;margin:15px 0 15px">
                                Confirm
                            </div>
                        </a>

而且我只需要使用regexp的href值提取:

https://host-test.com/create?userName=test3&amp;user-mail=myemail@gmail.com&amp;id=14b72820-3855-4f2b-9a39-543ced6784a0&amp;downloadurl=https://host-test.com:443/123/rest/tmp-z7vvymo3wmfzke/vfs/v2/downloadzip/&amp;projectid=d29ya3NwYWNleXFpYXlwZjgwb2sxNDA2MjovY3JlYXRlQWNj:createAcc;

每次的href值也可以不同,可以更長或更短

myString.replaceFirst(myString, "^<a\\s+href\\s*=\\s*\"([^\"]+)\".*", , "$1");

假設myString包含帶有a元素的字符串。

由於href屬性不能嵌套,因此應該沒問題,並且不需要完整的HTML解析器。 一個限制是它只能在雙引號中找到href屬性。

對於這個特定的字符串,您可以嘗試類似

Pattern pattern = Pattern.compile("<a\\shref=\"([^\"]+)");
//or if you cant use group numbers use look-behind mechanism like
//Pattern.compile("(?<=<a\\shref=\")[^\"]+");
Matcher matcher = pattern.matcher(yourString);
if (matcher.find())
    System.out.println(matcher.group(1));

但是,如果您的字符串可以更改(例如href atrubute可以包含其他屬性),則該字符串將無法正常工作。 這是使用解析器而不是正則表達式的原因之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM