如何使用正则表达式从URL获取域?

时间:2015-11-06 07:56:41

标签: java regex

我需要在网页上显示word文档。我使用名为Docx4j的库将.doc转换为html。这工作正常。但是,我收到了以下格式的超链接。

To search on google go to this link [#?] HYPERLINK \"http://www.google.com/\" [#?][#?] google[#?] and type the text.

我可以将其转换为

To search on google go to this link  (http://www.google.com) google and type the text.

使用以下代码

String myText = "To search on google go to this link [#?] HYPERLINK \"http://www.google.com/\" [#?][#?] google[#?] and type the text.";
System.out.println(myText);
String firstReplace = myText.replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("#\\?", "");
System.out.println(firstReplace);
String secondReplace = firstReplace.replaceAll("HYPER\\S+\\s+\"", "(");
System.out.println(secondReplace);
String finalReplace = secondReplace.replaceAll("/*\".", ")");
System.out.println("\n" + finalReplace);

有人可以提供一个正则表达式将上面的字符串转换为

To search on google go to this link google (http://www.google.com) and type the text.

- 编辑 -

有些链接显示为

[#?] HYPERLINK \"http://www.google.com/\" [#?][#?] google page[#?]

我应该将它们改为

google page (http://www.google.com)

我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以使用组引用来匹配括号后面的单词google

您可以替换以下正则表达式的结果:

'(\([^)]*\))\s?(\w+)'

以下:

'$2 $1'

您可以使用str.replaceAll()功能实现此目标。

精化:

第一个捕获组(\([^)]*\))将匹配括号之间的部分,[^)]*是一个否定的字符类,它匹配除右括号之外的任何字符组合。

第二个(\w+)将匹配该部分之后的字词,\w+将匹配任何单词字符组合。

答案 1 :(得分:0)

尽早删除[#?]标记,意味着您丢失了必要的信息,以便稍后进行必要的文字调整。您输入的基本模板是:

[#?] HYPERLINK *target* [#?] [#?] *clickable textual description of link* [#?]

那么为什么不使用这些标记对你有利呢?

像这样的一些正则表达式(注意:没有经过测试,可能是错误的,但只是为了给你一个基本的想法):

mystring.replaceAll("\\[#\\?\\] HYPERLINK (.*) \\[#\\?\\] \\[#\\?\\] (.*) \\[#\\?\\]", "$2 ($1)");

以上内容旨在为您提供Google页面(http://www.google.com)&#34;。但我也会质疑为什么要这样显示它。通常,对于HTML网页,您希望它为<a href="http://www.google.com">google page</a>。要做到这一点,只需更改上面的代码即可。