regex:如何在搜索结果中包含行尾


regex: how to include the end of line in search result?

我有以下字符串:

#key1=value1|#key2=value2|#key3=value3

我使用这个正则表达式来匹配键和值:

/#(.*)'=(.*)['|'v'h|]/gU

它适用于key1和key2,但不能捕获key3

演示:https://regex101.com/r/eU6lV8/2

你知道如何获取key3吗?

简单解决方案

通过将['|'v'h|]替换为(?:$|['|'v'h|]):,使行尾($)可能与键/值对匹配

/#(.*)'=(.*)(?:$|['|'v'h|])/gU

演示

更好的解决方案

更好的是,您可以通过去掉.*组来调整原始正则表达式以提高效率(正如anubhava在一条现已删除的评论中所建议的那样):

/#([^=]*)'=([^|]*)(?:$|['|'v'h|])/gU

演示

解释

原始regex不起作用的原因是'v'h分别只匹配垂直和水平空白。它们与后面根本没有空格的行的末尾不匹配。

一句忠告

也就是说,正如Wiktor Stribiżew在评论中所说,只拆分字符串通常比使用regex进行复杂的解析更容易。请确保您没有试图解决XY问题的实例。