Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取单引号或空格之间的字符串_Java_Regex - Fatal编程技术网

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

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

我希望有一个正则表达式,它将类加载器的名称插入到单引号/空格中,但不能同时插入两个引号/空格。 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痕量[岩芯]类 在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)
之后添加
*