Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 将字符串中的数字与字母和数字匹配_Regex_Perl - Fatal编程技术网

Regex 将字符串中的数字与字母和数字匹配

Regex 将字符串中的数字与字母和数字匹配,regex,perl,Regex,Perl,我需要编写一个Perl正则表达式,将单词中的数字与字母和数字进行匹配。 示例:test123。我想写一个只匹配数字部分的正则表达式并捕获它 我正在尝试这个\S*\d+\S*,它只捕获了3,但没有捕获123 我认为括号表示捕获组,这正是您不想要的。移除它们。你在寻找/\d+/或/[0-9]+/正则表达式中的*是贪婪的,这就是为什么它们也吃数字。正如@Marc所说,你不需要它们 perl -e '$_ = "qwe123qwe"; s/(\d+)/$numbers=$1/e; print $numb

我需要编写一个Perl正则表达式,将单词中的数字与字母和数字进行匹配。 示例:test123。我想写一个只匹配数字部分的正则表达式并捕获它


我正在尝试这个\S*\d+\S*,它只捕获了3,但没有捕获123

我认为括号表示捕获组,这正是您不想要的。移除它们。你在寻找/\d+/或/[0-9]+/

正则表达式中的*是贪婪的,这就是为什么它们也吃数字。正如@Marc所说,你不需要它们

perl -e '$_ = "qwe123qwe"; s/(\d+)/$numbers=$1/e; print $numbers . "\n";'
something122320=~/\d+//将返回122320;这可能就是你想要做的

\S匹配任何非空白字符,包括数字。您想要\d+:


正则表达式原子将尽可能匹配

最初,第一个\S*匹配test123,但正则表达式引擎必须回溯以允许\d+匹配。结果是:

 +------------------- Matches "test12"
 |    +-------------- Matches "3"
 |    |    +--------- Matches ""
 |    |    |
---  ---  ---
\S* (\d+) \S*
您所需要的只是:

my ($num) = "test123" =~ /(\d+)/;

它将尝试在位置0处匹配,然后在位置1处匹配。。。在找到一个数字之前,它将匹配尽可能多的数字。

如果以前需要非数字,那么根据您的示例,您可以使用以下非贪婪表达式:

/\w+?(\d+)/ or /\S+?(\d+)/ 
第二个更符合您的\S*规范

表达式满足一个或多个数字的任何条件,这可能就是您想要的。它可以是由空格123包围的一串数字,因为最后一个空格和第一个数字之间的边界满足零个或多个非空格,“3”和后面的空格之间的边界也是如此


您可能不需要任何规范,捕获字符串中的第一个数字就足够了。但如果不是,最好知道如何指定预期的模式。

我认为括号表示捕获组,这正是您不想要的。移除它们。你在找/\d+//或/[0-9]+//他说他想捕捉数字。@SinanÜnür,是的,他是这么说的。但他也表示,他只成功捕获了123位数字中的一位,而不是整个123位。我相信这是因为他是如何使用括号的;他/她在数字上输给了\s*是的,我现在同意你的观点,甚至还对另一个答案投了更高的票。这是一个雷杰克斯业余爱好者的愚蠢行为。但我在学习!
/\w+?(\d+)/ or /\S+?(\d+)/