我需要编写一个正则表达式来匹配逗号分隔列表中的元素,忽略 ,
附近的空格。
例如:
elem1、elem2、elem3、elem4、elem5、elem6
任意:elem1
elem2
elem3
elem4
elem5
elem6
应该匹配。
不允许使用尾随逗号(行尾之前)。
我尝试了这种模式:
pattern="(^|/,)\s*@{value}\s*(/,|$)"
但它不起作用。 (假阴性)
我怎样才能做到这种模式?我的怎么了?
谢谢。
最佳答案
插值是你的问题。并且,您不能在两侧使用“,”,只能在一侧使用它。
编辑 - 也就是说,如果您在全局范围内搜索,则不能在两侧使用逗号。例如,如果您想找到某物的全部。如果只找到第一个匹配项,那么两边都有逗号就可以了。我不了解java,但是,你不能只是将一个列表放入正则表达式中并期望它匹配,除非它首先设置为交替。就像“(?:^|,)\\s*(?:elem4|elem6)\\s*(?=,|\$)”
。当然,您需要对空格 \\s
进行另一次转义。
$value = '(elem.)';
$rx = "(?:^|,)\\s*$value\\s*(?=,|\$)";
或
$rx = '(?:^|,)\s*(elem.)\s*(?=,|$)';
在 Perl 中:
use strict;
use warnings;
my $value = '(elem.)';
my $str = ' elem1, elem2 ,elem3, elem4 ,elem5 ,elem6 ';
my $rx = "(?:^|,)\\s*$value\\s*(?=,|\$)";
while ( $str =~ /$rx/g ) {
print "'$1'\n";
}
输出
'elem1'
'elem2'
'elem3'
'elem4'
'elem5'
'elem6'
关于java - csv 匹配中的 ANT 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5030340/