2011-04-30 42 views
0

我需要一個PHP的regExp這將找到所有的數字,但沒有報價包裝,例如: 找到這個:一些文本1234一些文本 但不碰這個:一些文本「一些文本1234一些文本」, 和字符串這應該被傳遞到: 「1234」 或 「123」 等PHP的正則表達式找到沒有引號的數字?

我有一個不完整的desision:

preg_match_all('/\b\d+\b/', $str, $matches); 

ve also tried something like this [^\"|\']+ but it didn科技工作的。

回答

0

您可以使用PHP斷言:

http://php.net/manual/en/regexp.reference.assertions.php

preg_match_all("/\d+(?!')/s", $str, $matches); 
+0

Thx,至少U給了我看的方式,我記得2-3年前解決了這個問題,但現在刷新了記憶 - thx,祝你好運。 – 2014-01-14 18:03:06

1

我不知道,如果它可以用簡單的RE來完成,但是你可以通過兩步來實現。

1)過濾掉所有引用的字符串像

$filtered = preg_replace('/"[^"]+"/', '', $str) 

2)適用於您的正則表達式的結果

preg_match_all('/\b\d+\b/', $filtered, $matches); 

如果你的文字是不是巨大的或複雜的,它應該是罰款(取決於內存大小)

+0

我不需要用空格替換引號 - 我需要一個regExp來解決這個問題。 – 2011-04-30 09:21:23

+0

什麼?如果你只需要得到這些數字(不在引號內),那麼這個解決方案很容易,並且正是以這種方式工作:'$ str ='some「text 1234」lorem 542 2342「ispum 6」43';''' 542,2342,43' – Zap 2011-04-30 09:50:50

+0

因爲你可以仔細閱讀,並認識到我需要的文本將不可變與引號和埃特數字不包裹在引號找到。明白了嗎?換句話說 - 找到數字,但不能用引號將引號和數字以及其他內容保留在那裏而不做更改。 – 2011-04-30 16:57:20

相關問題