经过几个小时的搜索,尝试和失败,我决定在这里提出我的问题。我想用/ 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"。
我怎么能这样做? 谢谢你的回答,
本尼
答案 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") ;