Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java csv匹配中的蚂蚁元素_Java_Regex_Ant - Fatal编程技术网

Java csv匹配中的蚂蚁元素

Java csv匹配中的蚂蚁元素,java,regex,ant,Java,Regex,Ant,我需要编写一个正则表达式来匹配逗号分隔列表中的元素,忽略,附近的空格。 例如: elem1、elem2、elem3、elem4、elem5、elem6 以下任一项:elem1elem2elem3elem4elem5elem6应匹配 不允许使用尾随逗号(在行尾之前) 我尝试了这种模式: pattern=“(^ |/,)\s*@{value}\s*(/,|$)” 但它不起作用。(假阴性) 我怎样才能做到这一点?我怎么了 谢谢。从上一个问题中,您想测试csv列表是否包含特殊值。这是一项不同的任务,也是

我需要编写一个正则表达式来匹配逗号分隔列表中的元素,忽略
附近的空格。 例如:
elem1、elem2、elem3、elem4、elem5、elem6

以下任一项:
elem1
elem2
elem3
elem4
elem5
elem6应匹配

不允许使用尾随逗号(在行尾之前)

我尝试了这种模式:
pattern=“(^ |/,)\s*@{value}\s*(/,|$)”

但它不起作用。(假阴性)

我怎样才能做到这一点?我怎么了


谢谢。

从上一个问题中,您想测试csv列表是否包含特殊值。这是一项不同的任务,也是一项不同的ant任务:

<macrodef name="csvcontains">
    <attribute name="value"/>
    <attribute name="list"/>
    <attribute name="casesensitive" default="false"/>
    <sequential>
    <condition property="matched" else="false">
        <contains string="@{list}" substring="@{value}" casesensitive="@{casesensitive}"/>
    </condition>
    </sequential>
</macrodef>


(您可以考虑将属性
matched
重命名为
contained

插值是您的问题。而且,你不能在两边都消费,你只能在一边消费

编辑-也就是说,如果您是在全局范围内搜索,则不能在两侧使用逗号。例如,如果你想找到所有的东西。如果只是找到第一个匹配项,那么两边用逗号就可以了。我不知道java,但是,你不能仅仅把一个列表放到一个正则表达式中,并期望它匹配,除非首先将它设置为一个替代项。像
“(?:^ |,)\\s*(?:elem4 | elem6)\\s*(?=,| \$)”
。当然,您需要在空格
\\s
上进行另一次转义

$value = '(elem.)';  
$rx    = "(?:^|,)\\s*$value\\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'
我找到了一个解决方案:

图案为

^(.+,\s*|\s*)@{value}(\s*|\s*,.+)$
一个使用示例是:



问题是,如果我作为元素
python
传递,并且在列表中有
pythonic
而不是
python
条件匹配,我不希望这样。我只需要精确的元素匹配,我不知道。xml不会在dbl引号之间插入,因此不需要
\\s
。但你的接收将允许“值”。为什么
(^ |,)\s*{value}\s*(,|$)
(^ |,)\s*{value}\s*(?=,|$)
不起作用?
^(.+,\s*|\s*)@{value}(\s*|\s*,.+)$
<macrodef name="csvcontains">
    <attribute name="value"/>
    <attribute name="list"/>
    <attribute name="propertyName"/>
    <attribute name="casesensitive" default="false"/>
    <sequential>
        <condition property="@{propertyName}" else="false">
            <or>
                <isset property="@{propertyName}"/>
                <matches string="@{list}" pattern="^(.+,\s*|\s*)@{value}(\s*|\s*,.+)$" casesensitive="@{casesensitive}"/>
            </or>
        </condition>
    </sequential>
</macrodef>