Regex 将字符串中的数字与字母和数字匹配
我需要编写一个Perl正则表达式,将单词中的数字与字母和数字进行匹配。 示例:test123。我想写一个只匹配数字部分的正则表达式并捕获它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
我正在尝试这个\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+)/