Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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
Regex 仅当行不';I don’首先#_Regex_Ant - Fatal编程技术网

Regex 仅当行不';I don’首先#

Regex 仅当行不';I don’首先#,regex,ant,Regex,Ant,我试图创建一个regex替换(使用ant)来进行一些替换 应该处理的文本文件包含一些行,其中一些行以#开头,而另一些行则不以开头。我只想在不以# 为此,我已经发现^(?!#)将从结果中删除这些行 另外,我已经有了以下旧的替换正则表达式,它将所有出现的'替换为': 致意 汉内斯汉内斯 如果我能得到一些你正试图解析的文本,解决你的问题会更容易 卡尔 同时,我这里有一个正则表达式,如果两端都有一个'。 ,这可能更适合您。结合您的两个需求在JavaScript中是相当棘手的。但幸运的是这是可能的 ((?

我试图创建一个regex替换(使用ant)来进行一些替换

应该处理的文本文件包含一些行,其中一些行以
#
开头,而另一些行则不以
开头。我只想在不以
#

为此,我已经发现
^(?!#)
将从结果中删除这些行

另外,我已经有了以下旧的替换正则表达式,它将所有出现的
'
替换为
'

致意 汉内斯

汉内斯

如果我能得到一些你正试图解析的文本,解决你的问题会更容易

卡尔

同时,我这里有一个正则表达式,如果两端都有一个'。
,这可能更适合您。

结合您的两个需求在JavaScript中是相当棘手的。但幸运的是这是可能的

((?:^(?:#.*\n)*(?!#)[^'\n]*)?)'([^'\n]*(?:\n(?:#.*\n)*(?!#)[^'\n]*)?(?=')|[\s\S]*)
请访问以下网址查看它的实际应用:

警告:如果您的输入不包含注释之外的任何
字符,则此操作将失败


正则表达式有点复杂,但基本的方法是:通过仔细阅读所有注释来匹配下一个
。在这之后,通过遍历所有注释直到下一个未注释的
,或者直到字符串结束,来匹配下一个
。因此,表达式依赖于至少一次出现的
来正常工作,否则某些注释的
将被替换。这是不可避免的,因为JavaScript正则表达式的功能有限。但是,如果您愿意,可以将此逻辑编程到您的代码中。

我不使用ant,但因为它可以使用java.util.regex包(您可以选择哪个是带有的regex的默认包),所以我假设支持
\G
锚(在最坏的情况下,可以不使用它)以及所有格量词

您可以使用以下模式:

\G([^#']*+(?:(?m:^#.*|#)[^#']*|''+[^#']*)*+)'
替换为
\1'

其思想是强制所有匹配与
\G
锚定相邻,并捕获所有不需要在单个引号之前替换的内容(即以
#
开头的行、连续的单引号,以及显然不是单个引号的所有内容)


如果没有这些功能,您还可以使用:

([^#']*(?:(?:^#.*|#)[^#']*|''+[^#']*)*)('|(?![\s\S]))
而这个替换:
\1\2\2

但是您需要添加m标志


在这里,模式能够从头到尾匹配字符串中的每个位置,从而确保了连续性。

我不确定,但只有在该行不以#for me it worked \1(在windows/eclipse下使用它)开头时,才应进行替换对于这个答案,我已经看到了-2,不明白为什么人们会对你的答案投反对票“?此外,你为你的第二个版本写“…你需要添加m标志”。那么,我们是在看“gm”标志还是只看“m”标志?@user668338:谢谢你的精确性,我会用很好的替换来编辑答案。关于反对票,我认为人们没有别的事可做(特别是写一个好的答案)。关于标志,您必须添加m标志,因此标志属性必须是
gm
@user668338:是的,我确定。因为组2捕获字符串末尾的单引号或空字符串<代码>\2\2
加两个单引号或不加引号。
\G([^#']*+(?:(?m:^#.*|#)[^#']*|''+[^#']*)*+)'
([^#']*(?:(?:^#.*|#)[^#']*|''+[^#']*)*)('|(?![\s\S]))