gpt4 book ai didi

java - 正则表达式:匹配任何不是由正则表达式定义的单词

转载 作者:行者123 更新时间:2023-11-30 07:57:03 24 4
gpt4 key购买 nike

我想提取两个括号“ block ”之间的词以及第一个括号中的词(RUNNING 或 STOPPED)。

示例(提取粗体部分):

[ **RUNNING** ]  **My First Application**  [Pid: 4194]

[ **RUNNING** ] **Second app (some data)** [Pid: 5248]

[ **STOPPED** ] **Logger App**

因此,如您所见,[Pid: X] 部分是可选的。我可以按如下方式编写正则表达式:

\[\s+(RUNNING|STOPPED)\s+\]\s+([^\[]+).*

它会起作用的。但如果应用程序名称包含“[”字符,这将失败。我尝试了以下方法,但它不起作用:

\[\s+(RUNNING|STOPPED)\s+\]\s+(?!\[Pid)+.*

我的想法是匹配任何不是以“[Pid”开头的单词/字符,但我想这会匹配任何后面没有“[Pid”的单词。

有没有办法做到这一点:匹配任何不是“[Pid”的词,即匹配部分直到第一次出现“[Pid”子字符串?

最佳答案

你可以使用

\[\s+(RUNNING|STOPPED)\s+\]\s+([^\[]*(?:\[(?!Pid:)[^\[]*)*)

参见 regex demo

详细信息:

  • \[ - 文字 [
  • \s+ - 1+ 个空格
  • (RUNNING|STOPPED) - 第 1 组捕获 RUNNINGSTOPPED
  • \s+ - 1+ 个空格
  • \] - 文字 ]
  • \s+ - 1 个或多个空格
  • ([^\[]*(?:\[(?!Pid:)[^\[]*)*) - 第 2 组捕获:
    • [^\[]* - [
    • 以外的零个或多个字符
    • (?:\[(?!Pid:)[^\[]*)* - 零个或多个序列:
      • \[(?!Pid:) - [ 后面没有 Pid:
      • [^\[]* - [ 以外的零个或多个字符。

Java code :

String rx = "\\[\\s+(RUNNING|STOPPED)\\s+\\]\\s+([^\\[]*(?:\\[(?!Pid:)[^\\[]*)*)";
Pattern p = Pattern.compile(rx);
Matcher m = p.matcher("[ RUNNING ] My First Application");
if (m.find()) {
System.out.println(m.group(1));
System.out.println(m.group(2));
}

关于java - 正则表达式:匹配任何不是由正则表达式定义的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41619870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com