Hello,任何人都可以帮我使用正则表达式来匹配多个空格之间的字符串
我的字符串可能如下所示:
This is just Nicolas-764 sdh and his sister
我想匹配Nicolas-764 sdh
到目前为止,我写了这个,但它匹配第一个空格后的所有字符串
if ($string =~ m/(just) {5,}(.*) {5,}/) {
print "$1\n";
print "$2\n";
}
我想创建一个具有键just
和值Nicolas-764 sdh
的哈希值。
我不想只在多个空格之间匹配一个字符串。我也需要使用just
答案 0 :(得分:1)
你患有贪婪的匹配.*
。
您只需使用.*?
更改为非贪婪匹配。
use strict;
use warnings;
my $string = 'This is just Nicolas-764 sdh and his sister';
if ($string =~ m/just\s{5,}(.*?)\s{5,}/) {
print "$1\n";
}
输出:
Nicolas-764 sdh
答案 1 :(得分:0)
您的代码将是,
if ($string =~ m/^.*?just {5,}(\S+)\s+(\S+) {5,}.*$/) {
print "$1\n";
print "$2\n";
}
第一组包含Nicolas-764
,第二组包含sdh
或者
你也可以试试下面的正则表达式,
^.*?just {5,}(\S+(?:\s\S+)*?) {5,}.*$
<强>解释强>
^
首先,我们处于行首。.*?just
这将匹配第一个just
字符串。在?
进行非贪婪的匹配后*
。{5,}
匹配5个或更多空格。()
捕捉群组。\S+
一个或多个非空格字符。(?:)
非捕获组。它不会捕获任何东西。只需匹配即可。(?:\s\S+)*?
匹配一个空格,后跟一个或多个非空格字符。整个过程会发生零次或多次。{5,}
匹配5个或更多空格。.*
匹配任何字符零次或多次。$
断言我们在行尾。