在单引号或空格之间获取字符串

时间:2014-06-05 13:25:28

标签: java regex

我希望有一个正则表达式,它给出了在单引号/空格中插入的classLoader的名称,但不是两者的混合。 即一些例子。 :

  

2014-05-21 22:05:13.685 TRACE [核心]   sun.misc.Launcher$AppClassLoader@62c8aeb3搜索资源   '的java / util的/ LoggerFactory.class'。

预期输出sun.misc.Launcher$AppClassLoader@62c8aeb3

  

2014-05-21 22:05:13.685 TRACE [Core] Class   在类加载器中找不到'org.jboss.weld.metadata.TypeStore'   'org.jboss.modules.ModuleClassLoader@4ebded0b'。

预期输出org.jboss.modules.ModuleClassLoader@4ebded0b

  

2014-05-21 22:04:34.591 INFO [Core]开始插件   org.zeroturnaround.javarebel.integration.IntegrationPlugin来自   /Users/endragor/Downloads/jrebel/jrebel.jar in   sun.misc.Launcher$AppClassLoader@62c8aeb3

预期输出sun.misc.Launcher$AppClassLoader@62c8aeb3

请注意,对于最后一个例子,该行以新行字符结尾。即前面没有任何东西。

这是我尝试过的".*[\\s|'](.*ClassLoader.*[^']*)['|\\s].*"。但它不起作用。对于第一个示例,它给出了下面而不是sun.misc.Launcher$AppClassLoader@62c8aeb3

  

sun.misc.Launcher$AppClassLoader@62c8aeb3搜索资源   “的java / util的/ LoggerFactory.class

如果类加载器字符串是行的末尾,即上面的示例-3,我的正则表达式也不会处理。我该怎么做才能考虑'\\s而不是两者

3 个答案:

答案 0 :(得分:2)

试试这个:

String extractedValue=yourString.replaceAll("(.*)([ '])(.*ClassLoader.*?)(\\2)(.*)", "$3");

每当我们想要在一组预先设定的值之间提取String时,第一个和最后一个分隔符应该具有相同的值,我们可以使用Backreference功能。

答案 1 :(得分:1)

由于操作员更改了原始帖子,因此这里是更新后的答案。

只需使用以下模式检查toString() 类的默认Object表示。

[\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)

快照:

enter image description here

以下是DEMO

答案 2 :(得分:1)

这个正则表达式应该没有分组:

[^\s']*ClassLoader[^\s']*
java中的

应该是:

[^\\s']*ClassLoader[^\\s']*

|中不需要管道[..],正则表达式[abcd]表示a or b or c or 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