2012-03-13 53 views

回答

2

我假設只有兩個字符串

match = s.match(/\\"(.*)\\"/m) 
match[1] if match 
+0

即使你只假設一對引號(爲什麼?),如果兩者之間有換行符(按OP的要求),它將不起作用。 – stema 2012-03-13 07:40:09

+0

簡單地使它匹配換行'/ m'。改變了答案。 – iltempo 2012-03-13 07:44:03

+0

'm'是多行開關,它使'^'匹配行的開始,'$'行的末尾,我假設你的意思是'''它使點匹配換行符。 – stema 2012-03-13 08:17:26

0

這可以在沒有正則表達式來進行過轉義雙引號:

$str = '\"Some text inside here. And perhaps special chars including newlines...\" then more text (out here)'; 

$out = explode('"', $str); 

echo $out[0]; // outputs "\" 
echo $out[1]; // outputs "Some text... ...\" 
echo $out[2]; // outputs " then...here)" 
1

這應該爲你工作得很好:

b'\\".*?\\"' 
3

您不能使用此模式:

\".*\" 

,因爲「點」不,除非你使用標誌「S」,這使得「點」換行字符匹配匹配的一切(包括換行字符)

,甚至更多這種模式將與此示例不匹配:

"this is a quoted text" and "this is another one" 

上面的模式將匹配整個字符串而不是兩個帶引號的文本。 (因爲。*是貪婪的,並且會匹配最長的字符串,在這種情況下是整個字符串),而應該使用。*?這使模式「不情願」,它會匹配它可以的最短的字符串。

所以把它包起來,你可以使用這個模式與標誌「S」(點匹配所有):

\".*?\" 

或使用本:

\"[^"]\" 

不需要「s」標誌。 (因爲[^「]匹配任何不是」,其中包括新線。)

(我不熟悉PHP語法,所以你應該把應用標誌和自己逃脫字符的服務。)

+0

+1,這是一個有很好解釋的答案,有兩點:1.如果你想匹配反斜槓,你需要在模式中轉義它,2.如果你的例子中有否定的char類,逃跑者。另一種方法是將懶惰的量詞與「s」修飾符一起使用,例如'\\「。*?\\」' – stema 2012-03-13 08:52:24

+0

@Sahand:但爲「。」打開多行匹配模式更容易。 (請參閱其他答案) – alexis 2012-03-13 09:09:48

+1

通過打開多行標誌,您可以使$和^匹配開始和結束行。它不會使點匹配成爲新行。 (正如我剛纔提到的,語法在語言之間遞延,而且我不熟悉PHP,所以我留下了逃跑等等給讀者。) – Untitled 2012-03-13 09:29:38

相關問題