Regex 用于匹配后跟特定字符的组的正则表达式

Regex 用于匹配后跟特定字符的组的正则表达式,regex,Regex,因此,我需要匹配以下内容: 1.2. 3.4.5. 5.6.7.10 ((\d+)\(\d+)\((\d+)*)可以很好地用于第一行,但问题是:可能有很多行:可能是一行或多行 \n仅当有多行时才会出现 在字符串版本中,我得到如下信息:“1.2.\n3.4.5.\n1.2. 所以我的问题是:如果只有一行,\n不需要在末尾,但是如果有多行,\n需要在每行的末尾,除了最后一行。以下是我建议的模式: ^\d+(?:\.\d+)*\.?(?:\n\d+(?:\.\d+)*\.?)*$ 以下是该模式的

因此,我需要匹配以下内容:

1.2.
3.4.5.
5.6.7.10
((\d+)\(\d+)\((\d+)*)
可以很好地用于第一行,但问题是:可能有很多行:可能是一行或多行

\n
仅当有多行时才会出现

在字符串版本中,我得到如下信息:
“1.2.\n3.4.5.\n1.2.


所以我的问题是:如果只有一行,
\n
不需要在末尾,但是如果有多行,
\n
需要在每行的末尾,除了最后一行。

以下是我建议的模式:

^\d+(?:\.\d+)*\.?(?:\n\d+(?:\.\d+)*\.?)*$

以下是该模式的简要说明:

^                   from the start of the string
\d+                 match a number
(?:\.\d+)*          followed by dot, and another number, zero or more times
\.?                 followed by an optional trailing dot
(?:\n               followed by a newline
\d+(?:\.\d+)*\.?)*  and another path sequence, zero or more times
$                   end of the string

(\d+\.*)+\n*
将与您提供的文本匹配。如果您需要确保最后一行也以
结尾,则
(\d+\)++\n*
将起作用。

您可以使用正向前瞻
(?=.*\n)
检查结尾处是否有新行:

编辑

您可以使用匹配,在下一行有相同的模式时匹配,或者在没有换行时匹配模式

^(?:\d+\.\d+\.(?:\d+\.)*(?=.*\n\d+\.\d+\.)|\d+\.\d+\.(?:\d+\.)*(?!.*\n))

  • ^
    字符串的开头
  • (?:
    非捕获组
    • \d+\.\d+\.
      匹配一个数字和一个点的2倍
    • (?:\d+\)*
      重复0+次,匹配1+个数字和一个点
    • (?=.*\n\d+\.\d+\)
      正向前瞻,断言以模式开头的换行符后面的内容
    • |
    • \d+\.\d+\.
      匹配一个数字和一个点的2倍
    • (?:\d+\)*
      重复0+次,匹配1+个数字和一个点
    • *(?!..*\n)
      负向前看,断言后面的内容不是换行符
  • 关闭非捕获组

大多数编程语言都提供
m
标志。这是多行修改器。启用此选项将使
$
在行尾和字符串末尾匹配

下面的解决方案仅将
$
附加到当前正则表达式并设置
m
标志。这可能因您的编程语言而异

var text=“1.2.\n3.4.5.\n1.2.\n12.34.56.78.123.\n此1.2.不应命中”,
正则表达式=/(\d+)\(\d+)\(\d+)*)$/gm,
匹配;
while(match=regex.exec(text)){
控制台日志(匹配);

}
缺少一个右括号
(\d+)\(\d+)\(\d+)\(\d+)*
它应该在哪里?还是第一个不在那里?你的正则表达式与最后一行不完全匹配?你想不想匹配整行?请添加更多应该匹配和不应该匹配的示例。这个正则表达式也匹配这些类型的字符串
1…2…3…
@ElChiniNet,没错。这是一个修改过的版本n不匹配一行中的多个
((\d+\.?)+\n?)+
您好,第二行的问题是,它将与类似于
0123456789
的内容相匹配。它与
1.2.
不匹配。如果只有一行,就不会有任何
\n
@ArslanAli这会是更好的匹配吗?它匹配的内容比需要的多。它将匹配
1.
1.\n1。\n1。
@ArslanAli是的,这实际上是由您自己的示例数据建议的。
^(?:\d+\.\d+\.(?:\d+\.)*(?=.*\n\d+\.\d+\.)|\d+\.\d+\.(?:\d+\.)*(?!.*\n))