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