Php 查找第一个不是引号的指定字符
我试图找出如何找到字符串中第一个出现的指定字符let say=。这很简单,但我只想知道它的位置=如果它不在引号中 例如,在这种情况下:Php 查找第一个不是引号的指定字符,php,regex,Php,Regex,我试图找出如何找到字符串中第一个出现的指定字符let say=。这很简单,但我只想知道它的位置=如果它不在引号中 例如,在这种情况下: foo = bar "foo = bar" = baz 我想要first=的位置,但在本例中: foo = bar "foo = bar" = baz 我想要第二个的位置= 我在这里找到了,但我需要的是位置,不是分裂。我必须能够处理转义引号,所以我想我不能使用基于字符串的方法来解决这个问题 我的一个想法是使用莱克斯。使用基于regex
foo = bar
"foo = bar" = baz
我想要first=的位置,但在本例中:
foo = bar
"foo = bar" = baz
我想要第二个的位置=
我在这里找到了,但我需要的是位置,不是分裂。我必须能够处理转义引号,所以我想我不能使用基于字符串的方法来解决这个问题
我的一个想法是使用莱克斯。使用基于regexp的语法分析进行分析,它可以为我找到第一个出现的=,但它似乎相当繁重:这应该可以使用正则表达式,因为引号不能嵌套,如下所示:
^([^="]|"(\\"|[^"])*")*(=)
您需要找到最终匹配组的索引位置=
演示:这应该可以通过正则表达式实现,因为引号不能嵌套,如下所示:
^([^="]|"(\\"|[^"])*")*(=)
您需要找到最终匹配组的索引位置=
演示:您的目标/原始任务是什么?也许有一个更简单的解决方案…我不认为你可以只用regex就可以做到。你不是在寻找最后的位置=?在这种情况下,使用strrposI我想你将不得不写一个lexer。这是一个巨大的工作…暴躁:我不是在寻找最后一个=因为字符串可能是这样的:foo=bar=baz=johndoe你的目标/原始任务是什么?也许有一个更简单的解决方案…我不认为你可以只用regex就可以做到。你不是在寻找最后的位置=?在这种情况下,使用strrposI我想你将不得不写一个lexer。这是一个巨大的工作…脾气暴躁:我不是在寻找最后一个=因为字符串可能是这样的:foo=bar=baz=john doe在php中可以找到这样的位置:preg\u match'/^[^=]\\\\\\\\\\\\[^]**=',$searchstring,$matches,preg\u OFFSET\u CAPTURE;在php中可以找到如下位置:preg_match'/^[^=]\\\\\\\\[^]**=/',$searchstring,$matches,preg_OFFSET_CAPTURE;