2012-07-13 33 views
1

我試圖找出如何在字符串中找到指定字符的第一次出現(let say =)。這很簡單,但是我希望它的位置=只有當它不在引號內。查找第一個不是引號的指定字符

例如,在這種情況下:

foo = bar 

欲第一=的位置,但在這種情況下:

"foo = bar" = baz 

我想第二=的位置。

我發現similar question在這裏,但我需要的位置,而不是分裂。我必須能夠處理轉義引號\「或\',所以我認爲我不能使用基於字符串的方法來解決這個問題。

我的一個想法是使用lex.expression和基於regexp的語法分析,它可以找到我的=首次出現,但似乎相當沉重:)

+2

你的目標/任務是什麼?也許有一個更簡單的解決方案... – feeela 2012-07-13 14:08:23

+0

我不認爲你可以只用正則表達式。 – nhahtdh 2012-07-13 14:09:00

+0

你不是在找最後一個=?在這種情況下,使用strrpos – Grumpy 2012-07-13 14:10:18

回答

4

這應該是可能的正則表達式,因爲報價不能嵌套,類似如下:

^([^="]|"(\\"|[^"])*")*(=) 

你需要找到最終匹配組的索引位置(=)

演示:http://www.rubular.com/r/jt5CSIaOjo

+1

位置可以在PHP中找到像這樣: 'preg_match('/ ^([^ =「] |」(\\「| [^」])*「)*(=)/',$ searchstring,$ matches,PREG_OFFSET_CAPTURE);' – 2012-07-13 14:13:51

+0

像一個魅力,謝了哥們 :) – Pirozek 2012-07-13 14:33:20

相關問題