我需要一个相当复杂的正则表达式,它将选择它们之间有一个空格的单词,并且可以在它们中包括'-‘符号,但它不应该选择连续的空格。
'KENEDY JOHN G JR E' 'example' 'D-54'
我尝试了以下正则表达式:
\'([\s\w-]+)\'
但是它选择了连续的空格,这是我不希望它做的。
我想要选择表达式
'KENEDY JOHN G JR E'
'example'
'D-54'
发布于 2012-06-04 22:42:45
也许,
\'([\w-]+(?:\s[\w-]+)*)\'
编辑
如果不允许使用前导/尾随破折号(在单词边界上),则应为:
/\'(\w+(?:[\s-]\w+)*)\'/
发布于 2012-06-04 22:44:12
这样的表达式应该可以做到这一点:
'[\w-]+(?:\s[\w-]+)*'
发布于 2012-06-04 22:51:38
试试这个:
my $data = "'KENEDY JOHN G JR E' 'example' 'D-54'";
# Sets of
# one or more word characters or dash
# followed by an optional space
# enclosed in single quotes
#
# The outermost ()s are optional. There just
# so i can print the match easily as $1.
while ($data =~ /(\'([\w-]+\s?)+\')/g)
{
print $1, "\n";
}
输出
'KENEDY JOHN G JR E'
'example'
'D-54'
https://stackoverflow.com/questions/10883160
复制相似问题