Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.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
使用PHP和正则表达式选择非分隔逗号_Php_Html_Regex_Csv - Fatal编程技术网

使用PHP和正则表达式选择非分隔逗号

使用PHP和正则表达式选择非分隔逗号,php,html,regex,csv,Php,Html,Regex,Csv,人们可以立即看到问题所在。对于以下使用逗号作为分隔符的.csv文件,错误读取分隔字体系列的样式属性中的逗号是分隔符,导致html在该点被分隔 我需要一个使用PHP和正则表达式的解决方案,选择所有分隔逗号,同时忽略所有无关的逗号,并将它们更改为管道符号 一个最小的例子-这个 Trump , <span class=""font-families:Helvetica,Arial,sans-serif"">Make America Great Again!</span> ,

人们可以立即看到问题所在。对于以下使用逗号作为分隔符的.csv文件,错误读取分隔字体系列的样式属性中的逗号是分隔符,导致html在该点被分隔

我需要一个使用PHP和正则表达式的解决方案,选择所有分隔逗号,同时忽略所有无关的逗号,并将它们更改为管道符号

一个最小的例子-这个

Trump , <span class=""font-families:Helvetica,Arial,sans-serif"">Make America Great Again!</span> , Senate , 55%
特朗普,让美国再次伟大,参议院,55%
应成为:

Trump | <span class=""font-families:Helvetica,Arial,sans-serif"">Make America Great Again!</span> | Senate | 55%
特朗普|让美国再次伟大!|参议院| 55%

您可以从这里开始

preg_replace("/\s{1}\,\s{1}/g","|", "Trump , .....")

假设您的
'fontfamilies'
始终包含在
'span'
元素中,则可以使用以下正则表达式:

\s,\s((?=.*<span)|(?!.*<\/span>))
包括更多你喜欢(记住你只需要那些有一个字体集)

Edit2

要完全通用(失去一些安全性),您可以使用:

\s,\s((?=.*<\w+)|(?!.*<\/\w+>))
\s,\s(?!.*<\w+)(?=.*<\/\w+>)

这不是“我需要一个解决方案”类型的网站。在这里你展示你的工作,我们告诉你你是如何把它搞砸的。“所以请你自己先努力一下。”达曼说,我对此很反感。在过去的一天里,我一直没有睡过觉。我累坏了,差点被一辆过马路的汽车撞倒——这就是我努力工作的结果。如果你不想帮忙,那就不要,但不要贬低别人。有时候人们不知道从哪里开始。其他时候,他们做出了合理的努力,但不想偏向于回应,希望有一个新的视角。这和你有什么关系?我很想帮你,但如果你不知道从哪里开始,我们怎么办?这听起来像是一个非常宽泛的问题,很难理解你到底想要实现什么。为什么CSV值没有转义/引用?你怎么能猜出什么是合法的分隔符,什么不是呢?好吧,CSV值就是这样。CSV文件是按原样给我的,我有责任修复它。至于知道如何隔离合法的分隔符,这正是一个问题,如果我知道答案,我就不会首先问这个问题。这就像得到一个黑白图像,然后被要求恢复正确的颜色。集会没有韵律,也没有理由。我们可以猜测,但它不会100%的工作时间。应更正生成器。
\s{1}
\s
相同。PHP中没有
g
修饰符。事实上,我不能排除有人编写
字体系列的可能性:Helvetica、Arial、sans serif
,在逗号旁边加空格,这将很遗憾地否定这一奇妙的解决方案……我们能将其推广到所有元素类型吗?我的意思是,老实说,即使这样,逗号也可以出现在标记之外。我不能给出一个足够通用的示例的原因是我们正在研究非结构化html文本。我认为最好用什么是分隔逗号来定义,而不是用什么不是分隔逗号。它可以比指定特定的元素类型更一般。如何获取此
的负数,(?=[^)
在正则表达式中?我担心猫、狗、兔子——或者甚至是没有任何html的猫、狗、兔子——我们如何将这些逗号排除在标记之外,但它们不是分隔符?我知道这是对问题的一点扩展,所以我可能会在短时间内接受你的答案,但我只是想知道知道所有非分隔符的逗号是否存在通用匹配吗?猫、狗不会匹配,因为它们在标记内。您可以在上面的正则表达式链接中进行测试。在标记外,所有内容都被视为delimeter(正则表达式很愚蠢)。
\s,\s(?!.*<\w+)(?=.*<\/\w+>)