任何人都能解释一下吗?:正则表达式

use*_*564 5 regex tcl

TCL:任何人都能解释一下吗?:正则表达式

我之间感到困惑?和?:.

?表示前面的字符可能存在,也可能不存在.

然后我不明白是什么(?:)表示.

任何人都可以请解释一下.

([0-9]+(?:\.[0-9]*)?)
Run Code Online (Sandbox Code Playgroud)

Rav*_*yal 17

假设你正试图寻找类似ABC123ABC123.45在你输入的字符串和你想捕捉单独的字母和数字.你会使用正则表达式(有点类似于你的)

([A-Z]+)([0-9]+(\.[0-9]+)?)
Run Code Online (Sandbox Code Playgroud)

上面的正则表达式将匹配ABC123.45并提供三个组,它们代表整个匹配的子部分,并由你放置这些()括号的位置决定.所以,鉴于我们的正则表达式(不使用?:),我们得到了

Group 1 = ABC
Group 2 = 123.45
Group 3 = .45
Run Code Online (Sandbox Code Playgroud)

现在,总是捕获小数部分可能没什么意义,它实际上已经在我们的第2组中捕获了.那么,你如何让这个群体()不被捕捉?是的,通过?:在开始时使用

([A-Z]+)([0-9]+(?:\.[0-9]+)?)
Run Code Online (Sandbox Code Playgroud)

现在,您只能获得两个所需的组

Group 1 = ABC
Group 2 = 123.45
Run Code Online (Sandbox Code Playgroud)

请注意,我还将正则表达式的最后一部分更改\.[0-9]*\.[0-9]+.这样可以防止匹配123.数字而没有小数部分,但仍然有一个点.


Rah*_*thi 3

?:只是不创建捕获组。例如a(?:b)将匹配“abc”中的“ab”