Regex 需要以下正则表达式的细分
我很难理解下面的正则表达式是如何工作的Regex 需要以下正则表达式的细分,regex,regex-lookarounds,Regex,Regex Lookarounds,我很难理解下面的正则表达式是如何工作的 ,(?=([^\"]*\"[^\"]*\")*[^\"]*$) 表达式基本上匹配所有而不是括在引号中的逗号 例如: apple, banana, pineapple, "tropical fruits like mango, guava, key lime", peaches 将分为: apple banana pineapple "tropical fruits like mango, guava, key lime" peaches 有人能给我一
,(?=([^\"]*\"[^\"]*\")*[^\"]*$)
表达式基本上匹配所有而不是括在引号中的逗号
例如:
apple, banana, pineapple, "tropical fruits like mango, guava, key lime", peaches
将分为:
apple
banana
pineapple
"tropical fruits like mango, guava, key lime"
peaches
有人能给我一个很好的表达分类吗?我不明白积极的前瞻是如何起作用的。根据:
,(?=([^\"]*\"[^\"]*\")*[^\"]*$)
(我与RegexBuddy或其作者没有任何关系。我只是该软件产品的用户。)根据:
(我与RegexBuddy或其作者没有任何关系。我只是软件产品的用户。)环顾四周的断言
(正向前瞻包括)是零宽度检查。他们实际上不消耗任何输入,但如果他们不满意,他们会让正则表达式引擎回溯
正向前瞻记住输入中的位置,并尝试从当前位置向右匹配。如果它不匹配,正则表达式引擎将回溯,否则它将返回到输入中记住的位置,并在前瞻之后继续
正则表达式被解构
此正则表达式使用逗号并确保其余输入匹配([^\“]*\“[^\“]*\”*[^\“]*\”*[^\“]*$
)
表示“一个字符,而不是双引号”[^\“]
表示前一个字符可以重复零次或多次*
- 括号构成一个组–它意味着“任何正好包含两个双引号的字符串,以一个双引号结尾”
- 当
应用于该组时,它表示“任何包含偶数双引号的字符串,以一结尾”*
- 描述的“以一个[双引号]结尾”部分是个问题,您不需要这样的约束。因此,您添加了
,以提供非双引号字符的可能性[^\“]*
匹配字符串的结尾$
([^\“]*\“[^\“]*\”*[^\“]*\”*[^\“]*$
)
表示“一个字符,而不是双引号”[^\“]
表示前一个字符可以重复零次或多次*
- 括号构成一个组–它意味着“任何正好包含两个双引号的字符串,以一个双引号结尾”
- 当
应用于该组时,它表示“任何包含偶数双引号的字符串,以一结尾”*
- 描述中的“以一个[双引号]结尾”部分有问题,您不需要这样的约束。因此您添加了
,以提供非双引号字符的可能性[^\“]*
匹配字符串的结尾$
总而言之,前瞻性检查在逗号前和逗号后是否有偶数个双引号。如果你能直观地表示你的正则表达式,你会得到(多亏了) 您可以使用
^(([^',]+|'[^']*'.[^']*',)+$
第二个捕获组将获得您的每个元素
注意:我不知道您使用的是什么编程语言。。。这使得很难给出一个好的例子。因为我不知道你到底想配什么。如果编程语言能够将#2个组中的每一个存储在一个数组中,那么您就有了一个解决方案…如果您能够直观地表示您将得到的正则表达式(感谢) 您可以使用
^(([^',]+|'[^']*'.[^']*',)+$
第二个捕获组将获得您的每个元素
注意:我不知道您使用的是什么编程语言。。。这使得很难给出一个好的例子。因为我不知道你到底想配什么。如果编程语言能够将#2个组中的每一个存储在一个数组中,那么您就有了一个解决方案…您使用的是什么语言?也许我们可以提供一个更好的regexIt,让您更容易理解,而不必进行不必要的转义()。您可以使用普通的“除非这个正则表达式本身被包装在”引号中。正向前瞻意味着找到该模式并查看它后面是否有另一个模式。也有正向前瞻、负向前瞻和负向前瞻。看看这个@gtgaxiola,我会匹配它,而不是拆分字符串。这里是模式
/(“|”).?\1|[^,\s]+/s
,如果您两次转义\1
,\s
等,它应该可以在Java中工作……我添加了一个解释,说明您使用的是什么语言?也许我们可以提供一个更好的regexIt,这样您就更容易理解,而不需要不必要的转义()。您可以直接使用“除非这个正则表达式本身是用“引号”包装的。正向前看意味着找到模式并查看它后面是否有另一个模式。还有正向后看、负向前看和负向后看。看看这个@gtgaxiola,我会匹配它,而不是拆分字符串。下面是模式/(“|”).\1|[^、\s]+/s
,如果您两次转义\1
,\s
等,它应该在Java中工作。我补充了一个解释