Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 正则表达式替换函数:在不匹配的情况下,$1返回整行,而不是null_Regex_Regex Group_Regexp Replace - Fatal编程技术网

Regex 正则表达式替换函数:在不匹配的情况下,$1返回整行,而不是null

Regex 正则表达式替换函数:在不匹配的情况下,$1返回整行,而不是null,regex,regex-group,regexp-replace,Regex,Regex Group,Regexp Replace,测试链接: 这让我快发疯了 我想提取以下行中的条形码: Ceres Juice Apricot 12 x 1lt unit: 6001240102022 Ceres Juice Cranberry& Kiwi Juice 12 x 1lt... unit: Ceres Juice Guava 12 x 1lt.. unit:6001240222829 Ceres Juice Orange 12x1lt... unit: Ceres Juice Medley of Fruits 1L x

测试链接:

这让我快发疯了

我想提取以下行中的条形码:

Ceres Juice Apricot 12 x 1lt unit: 6001240102022
Ceres Juice Cranberry& Kiwi Juice 12 x 1lt... unit:
Ceres Juice Guava 12 x 1lt.. unit:6001240222829
Ceres Juice Orange 12x1lt... unit:
Ceres Juice Medley of Fruits 1L x 12 unit: 6001240100660
它应返回:

6001240102022

6001240222829

6001240100660
我正确地使用了
*(\d{13})。*

然后我使用
$1
返回第一个匹配项

但我的结果如下:

6001240102022
Ceres Juice Cranberry& Kiwi Juice 12 x 1lt... unit:
6001240222829
Ceres Juice Orange 12x1lt... unit:
6001240100660
原因:

此问题的原因是,如果匹配组中没有任何内容($1),则“Replace”返回原始字符串

解决方法:

确保每一行上都有一个“匹配项”,并将其放入匹配组1($1)。然后把你真正的对手放入第二组(2美元)。如何做到这一点

语言/平台:


任何。我已经尝试了所有在线正则表达式网站和记事本++

您可以添加一个匹配任何字符串的替代项

.*(\d{13}).*|.*
关键是首先尝试第一个备选方案,如果一行中有13个连续数字,则备选方案将“获胜”,并且
*
不会触发<代码>$1将保留13位数字。看

或者,可选的非捕获组和强制数字捕获组:

(?:.*(\d{13}))?.*


在这里,
(?:.*(\d{13}))?
将至少执行一次(因为
是一个贪婪的量词,匹配1或0次),并将找到13位数字,并将它们放在除换行符以外的任何0+字符之后的组1中。模式末尾的
*
将与行的其余部分匹配。

添加一个与任何字符串匹配的替代项,
*(\d{13})。*.*.*
。或者,使用
(?:.*(\d{13}))?.*
一个快速测试表明它是有效的:
*(\d{13})。*|.*
还不知道怎么做><但是谢谢!我已经努力解决这个问题大约3个小时了。非常感谢Wiktor。你让我摆脱了痛苦:)我在这里学到了一些有用的东西。但是,我想知道您的术语是否是100%,因为我认为从技术上讲,您的解决方案会导致每行匹配(而不仅仅是组!),而我的解决方案不是:我的解决方案甚至无法在某些行上“匹配”。你也可以在没有“第二组”的情况下谈论“第二组”。尽管如此,我还是非常高兴并感谢你的帮助。谢谢大家!@理查德伍尔夫当然,只有第1组,我在解释中修正了这一部分。匹配,是的,但是这里有一个捕获组,当一个模式与字符串的某个部分匹配时,我使用动词“捕获”;当我在你的帮助之前尝试这一点时,我认为这是不可能的——我认为非捕获部分优于/拥有对内部组的权限。