我想找到一个以http://
开头并以.com
结尾的字符串。
但http://
和.com
不需要打印。
$str = "http://example.com";
$str =~ /http:\/\/example.com/;$result = "$&\n";
print $result;
与使用python完成的操作基本相同。
#!/usr/bin/python
import re
str = 'http://example.com'
search = re.search(r'http://(\w+).com', str)
if search:
print search.group(1)
它只会显示“示例”。如何在Perl中做到这一点?
答案 0 :(得分:3)
使用专业解析器的强大解决方案:
use feature 'say';
use strict; use warnings;
use URI;
use URI::Find;
URI::Find->new(sub {
my $uri = shift;
say $uri->host =~ m{(\w+)[.]com\z};
})->find(\ (my $x = q{http://example.com/}) );
答案 1 :(得分:0)
试试这个简单的代码:
$str = 'http://example.com';
print "$_\n" for $str =~ m{\A http:// (\w+) [.] com \z}x;
为确保您的结果完整,请将模式锚定在开头\A
,然后结束\z
。使用与/
不同的模式分隔符来避免倾斜牙签综合征,并使用x
选项使您的模式更具可读性。
您需要使用(...)
来捕获要提取的部分。
您可以在ideone.com
上测试此代码答案 2 :(得分:0)
下面不是那样的perlish解决方案:
$str = 'http://example.com';
if (($url) = $str =~ /http:\/\/(\w+)\.com/) {
print $url, "\n";
}
答案 3 :(得分:-1)
在你的Python片段中,你用括号捕获你想要的文本,但在你的Perl片段中你已经把它们遗漏了。此外,您要捕获的部分是硬编码的,而不是表示为\w+
。在那里挖掘。