两个分隔符之间的子串
我有一个字符串:“这是一个应该使用的URL http://www.google.com/MyDoc.pdf ”
我只需要提取从http开始并以pdf结尾的URL:http: //www.google.com/MyDoc.pdf
String sLeftDelimiter = "http://"; String[] tempURL = sValueFromAddAtt.split(sLeftDelimiter ); String sRequiredURL = sLeftDelimiter + tempURL[1];
这使我的输出为“应该使用的http://www.google.com/MyDoc.pdf”
需要帮助。
这种问题是正则表达式的用途:
Pattern findUrl = Pattern.compile("\\bhttp.*?\\.pdf\\b"); Matcher matcher = findUrl.matcher("This is a URL http://www.google.com/MyDoc.pdf which should be used"); while (matcher.find()) { System.out.println(matcher.group()); }
正则表达式解释说:
-
\b
在“http”之前有一个单词边界(即xhttp不匹配) -
http
字符串“http”(请注意,这也匹配“https”和“httpsomething”) -
.*?
任何字符(.
)任意次数(*
),但尝试使用最少量的字符(?
) -
\.pdf
文字字符串“.pdf” -
\b
在“.pdf”之后有一个单词边界(即.pdfoo不匹配)
如果您只想匹配http和https,请尝试在字符串中使用此而不是http
:
-
https?\:
– 这匹配字符串http,然后是可选的“s”(由s后面的?
表示),然后是冒号。
为什么不使用starts类的startsWith(“http://”)和endsWith(“。pdf”)方法。
该方法都返回布尔值,如果两者都返回true ,那么您的条件成功,否则您的条件失败。
尝试这个
String StringName="This is a URL http://www.google.com/MyDoc.pdf which should be used"; StringName=StringName.substring(StringName.indexOf("http:"),StringName.indexOf("which"));
您可以在此处使用Regular Expression
function。 首先,您必须在原始字符串中找到Url
,然后删除其他部分。
以下代码显示了我的建议:
String regex = "\\b(http|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"; String str = "This is a URL http://www.google.com/MyDoc.pdf which should be used"; String[] splited = str.split(regex); for(String current_part : splited) { str = str.replace(current_part, ""); } System.out.println(str);
此代码段可以使用任何模式检索任何字符串中的任何url。 您无法在上面的正则表达式中将自定义协议(如https
添加到协议部分。
我希望我的回答可以帮到你;)
public static String getStringBetweenStrings(String aString, String aPattern1, String aPattern2) { String ret = null; int pos1,pos2; pos1 = aString.indexOf(aPattern1) + aPattern1.length(); pos2 = aString.indexOf(aPattern2); if ((pos1>0) && (pos2>0) && (pos2 > pos1)) { return aString.substring(pos1, pos2); } return ret; }
您可以将String.replaceAll与捕获组和后向引用一起使用,以获得非常简洁的解决方案:
String input = "This is a URL http://www.google.com/MyDoc.pdf which should be used"; System.out.println(input.replaceAll(".*(http.*?\\.pdf).*", "$1"));
以下是正则表达式的细分: https : //regexr.com/3qmus