Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.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_Regex - Fatal编程技术网

Php 查找第一个不是引号的指定字符

Php 查找第一个不是引号的指定字符,php,regex,Php,Regex,我试图找出如何找到字符串中第一个出现的指定字符let say=。这很简单,但我只想知道它的位置=如果它不在引号中 例如,在这种情况下: foo = bar "foo = bar" = baz 我想要first=的位置,但在本例中: foo = bar "foo = bar" = baz 我想要第二个的位置= 我在这里找到了,但我需要的是位置,不是分裂。我必须能够处理转义引号,所以我想我不能使用基于字符串的方法来解决这个问题 我的一个想法是使用莱克斯。使用基于regex

我试图找出如何找到字符串中第一个出现的指定字符let say=。这很简单,但我只想知道它的位置=如果它不在引号中

例如,在这种情况下:

  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;