当前位置: 首页 > 知识库问答 >
问题:

Pattern.compile()引发异常

单于煌
2023-03-14

我使用正则表达式来查找一个字符串是否存在于一个书页中。下面是相同的代码。

    String regex = ".*\\b.{0}" + searchText + ".{0}.*\\b";
    Pattern pattern = Pattern.compile(regex);
    pattern.matcher("This is the text area where I am trying to look for the particular text, which is in the variable searchText. This text will have the string (222M) as part of this string. The find method should give me a true result even if I don't enter the closing brakect of the word. This is a multiline string").find()

观察:

>

  • 案例1:当searchText=“(222M)”时
  • 结果:找到字符串。

    案例2:当search chText="(222M"//缺少括号时

    我得到以下例外。

    索引22:.\b.{0}(1110r.{附近regexp模式中嵌套的括号不正确。{0}.\b

    还有更好的在页面中查找字符串的选项。使用String.contains()时不一致。这是在android平台上^

  • 共有1个答案

    湛光华
    2023-03-14

    尝试引用搜索文本字符串

    ... + Pattern.quote(searchText) + ...
    

    ... 因为它可能包含模式保留字符,因此会破坏您的模式

    编辑...这是当它包含一个非闭合括号时的情况。

    编辑(二)

    我不太确定你想用模式的部分来完成什么。

    在这种情况下,有两个工作示例:

    >

  • 用于文字匹配(String.contains应执行相同的操作)
  • 用于非字有界匹配,其中在给定的String之前或之后的任何字符都是非字字符

    String searchText = "(222M";
    String regex = Pattern.quote(searchText);
    Pattern pattern = Pattern.compile(regex);
    Pattern boundedPattern = Pattern.compile("(?<=\\W)" + regex + "(?=\\W)");
    String input = "This is the text area where I am trying " +
        "to look for the particular text, which is in the variable searchText. " +
        "This text will have the string (222M) as part of this string. " +
        "The find method should give me a true result even if I don't " +
        "enter the closing brakect of the word. This is a multiline string";
    Matcher simple = pattern.matcher(input);
    Matcher bounded = boundedPattern.matcher(input);
    
    if (simple.find()) {
        System.out.println(simple.group());
    }
    if (bounded.find()) {
        System.out.println(bounded.group());
    }
    

    输出

    (222M
    (222M
    

    最后的注释

    如果希望模式不区分大小写,可以将模式.不区分大小写添加为初始化标志。

  •  类似资料:
    • 你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。 如何引发异常 例13.2 如何引发异常 #!/usr/bin/python # Filename: raising.py classShortInputException(Exception):     '''A u

    • 问题内容: 鉴于此Java 8代码 我们如何正确地将其委派给方法调用的堆栈?(简而言之,如何使此方法抛出此错误?) Java中的Lambda看起来对错误处理不是很友好… 问题答案: 我的方法是从lambda 偷偷地 将其抛出,但是要小心,使该方法在其子句中声明它。使用我在这里发布的课程: 这样,您可以有效地使编译器仅“移开视线”,从而在代码中的某个位置禁用其异常检查,但是通过在方法中声明异常,可以

    • 下面有一些代码,我试图在其中使用以字符串形式打印所有匹配项。 上面的代码在线程“main”java.lang.IndexOutOfBoundsException中抛出异常:没有第2组异常。

    • 我正在尝试使用@Valid验证我的JPA实体,如下所示: 它工作了一段时间,但现在它停止工作,我不知道为什么。我试着在< code>persist方法中手动执行,它按预期工作: 可能会发生什么情况,或者我该如何调试?

    • 问题内容: 它可能是实现细节,但是对于Oracle和IBM JDK而言,至少是对已编译模式进行了缓存,还是作为应用程序开发人员我们需要自己对已编译模式进行缓存? 问题答案: 我不认为结果会被缓存,并且代码或文档中也没有这种行为的证据。自己实现这样的缓存(当然)是比较琐碎的,但是我对这样的缓存很有用的用例感兴趣。 回覆。下面的注释和String.split(),有一种不同的方法,即代码采用简单的1或

    • 问题内容: 我想使用HttpURLConnection进行POST。我以两种方式尝试这种方法,但是这样做总是让我兴奋不已: 我在这两种情况下得到的异常是: java.net.SocketException:操作超时:connect:可能是由于无效的地址 功能1: 或功能2: 问题答案: 根本无法访问该URL。URL错误或DNS服务器无法解析主机名。尝试使用众所周知的URL进行简单连接以排除一个和另