Java 获取单引号或空格之间的字符串
我希望有一个正则表达式,它将类加载器的名称插入到单引号/空格中,但不能同时插入两个引号/空格。 i、 e.一些例子: 2014-05-21 22:05:13.685痕量[岩芯] sun.misc.Launcher$AppClassLoader@62c8aeb3搜索资源 “java/util/LoggerFactory.class” 预期输出Java 获取单引号或空格之间的字符串,java,regex,Java,Regex,我希望有一个正则表达式,它将类加载器的名称插入到单引号/空格中,但不能同时插入两个引号/空格。 i、 e.一些例子: 2014-05-21 22:05:13.685痕量[岩芯] sun.misc.Launcher$AppClassLoader@62c8aeb3搜索资源 “java/util/LoggerFactory.class” 预期输出sun.misc.Launcher$AppClassLoader@62c8aeb3 2014-05-21 22:05:13.685痕量[岩芯]类 在class
sun.misc.Launcher$AppClassLoader@62c8aeb3
2014-05-21 22:05:13.685痕量[岩芯]类
在classloader中找不到“org.jboss.weld.metadata.TypeStore”
'org.jboss.modules。ModuleClassLoader@4ebded0b'.
预期输出org.jboss.modules。ModuleClassLoader@4ebded0b
2014-05-21 22:04:34.591信息[核心]已启动插件
org.zeroturnal.javarebel.integration.IntegrationPlugin来自
/中的Users/endragor/Downloads/jrebel/jrebel.jar
sun.misc.Launcher$AppClassLoader@62c8aeb3
预期输出sun.misc.Launcher$AppClassLoader@62c8aeb3
请注意,对于最后一个示例,该行以新行字符结尾。i、 前面什么都没有
这是我尝试过的“*[\\s |”](.*ClassLoader.*[^']*)['\\\s].*”
。但它不起作用。对于第一个示例,它给出了以下内容,而不是sun.misc.Launcher$AppClassLoader@62c8aeb3
:
sun.misc.Launcher$AppClassLoader@62c8aeb3搜索资源
'java/util/LoggerFactory.class
另外,如果类加载器字符串是行的末尾,我的正则表达式也不会处理,例如上面的示例3。我该怎么做才能使
'
被考虑,或者\\s
但不是两者都被考虑,因为操作员已经更改了原始帖子,所以这里是更新的答案
只需使用下面的模式来检查对象类的默认toString()
表示形式
[\w\.$]+ClassLoader@[a-z0-9]+
模式补偿:
\w A word character: [a-zA-Z_0-9]
X+ X, one or more times
[abc] a, b, or c (simple class)
快照:
这是一个试试这个:
String extractedValue=yourString.replaceAll("(.*)([ '])(.*ClassLoader.*?)(\\2)(.*)", "$3");
每当我们想要在一组预先定义的值之间提取字符串,其中第一个和最后一个分隔符应该具有相同的值时,我们可以使用feature。此正则表达式不需要分组:
[^\s']*ClassLoader[^\s']*
在java中,它应该是:
[^\\s']*ClassLoader[^\\s']*
您不需要管道|
在[…]
中,在regex[abcd]
中表示a或b或c或d
更新
添加java代码:
public static void main(String[] args){
Pattern p = Pattern.compile("[^\\s']*ClassLoader[^\\s']*");
Matcher m = p.matcher("2014-05-21 22:05:13.685 TRACE [Core] sun.misc.Launcher$AppClassLoader@62c8aeb3 searching for resource 'java/util/LoggerFactory.class'.");
if (m.find()) {
System.out.println(m.group());
}
}
输出:
sun.misc.Launcher$AppClassLoader@62c8aeb3
我想您误解了这个问题:)后面的字符串-->是我希望从前面的字符串中得到的答案。我需要分组,因为我需要提取类加载器的名称。谢谢您的帮助:)。但是上面的一个不匹配:(@Jatin您是否正确编写了java代码?请参阅更新,我为您的示例1.Oops添加了java代码。它与以下内容不匹配:2014-05-21 22:05:10.583 INFO[Core]org.jboss.modules。ModuleClassLoader@4ebded0b来自“虚拟资源”的检测类“com.spirent.rlm.core.app.internal.StatelessService”[com/spirent/rlm/core/app/internal/statelessicservice.class,Dir[/Users/endragor/Work/ilo/iTestLabOptimizer/src/rlm core/target/classes,[]]”。也就是说,如果我对上述字符串执行m.find,它将返回false,因为我认为字符串末尾没有空格:)我们还需要处理这种情况,但\\2意味着什么?它是对第二组(['])
的反向引用,请查看我回答中的链接。如果您想处理没有空格的情况,请在(\\2)
之后添加*
。