从RegEx String获取资源

时间:2015-06-30 14:21:26

标签: java regex resources expression

经过几个小时的搜索,尝试和失败,我决定在这里提出我的问题。我想用/ src中加载​​的资源替换字符串中的:(.+?):。例如,如果我输入":foo.bar:"它会用this.getClass().getResource("foo.bar");替换它。

我的具体情况: 我有一个使用表情符号的聊天应用程序,位于" src"中的"表情符号" - 文件夹中。如果用户键入":foo:",它应该获得" smileys / foo.png"的完整URL,如果该文件存在(在这种情况下为this.getClass().getResource("smileys/foo.png");)并把它放入标签。因此,例如,如果用户键入" foo:bar:",则应将其转换为" foo C:/< ...> /smileys/bar.png"。

我怎么能这样做? 谢谢你的回答,

本尼

2 个答案:

答案 0 :(得分:0)

他们在oracle提供的文档中解释了如何执行此操作。这通常适用于所有语言的所有正则表达式,而不仅仅是java。

"在正则表达式中将反向引用指定为反斜杠(),后跟一个数字,指示要调用的组的编号。例如,表达式(\ d \ d)定义了一个匹配行中两个数字的捕获组,可以通过反向引用\ 1在表达式中稍后调用。

要匹配任何2位数字,后跟完全相同的两位数字,您可以使用(\ d \ d)\ 1作为正则表达式:

Enter your regex: (\d\d)\1

Enter input string to search: 1212

I found the text "1212" starting at index 0 and ending at index 4.

如果更改最后两位数,则匹配将失败:

Enter your regex: (\d\d)\1

Enter input string to search: 1234
No match found.

对于嵌套捕获组,反向引用的工作方式完全相同:指定反斜杠后跟要调用的组的编号。"

https://docs.oracle.com/javase/tutorial/essential/regex/groups.html

答案 1 :(得分:0)

下面的代码将执行您想要的操作:

String s = "x = :foo.bar: ;";
String res = s.replaceAll(":(.+?):","this.getClass().getResource(\"$1\")");
System.out.println(res);

打印

x = this.getClass().getResource("foo.bar") ;