2012-02-13 49 views
0

搜索以「%」的話,我一直試圖弄清楚這一點,我自己,但我恐怕正則表達式只是不關我的事。在此示例字符串:「我的名字是名字%,我住在$地址。」我試圖讓與「%」開頭的單詞然後$name$address與他們的價值觀取代他們依賴於正則表達式中發現什麼詞。新字符串然後返回完整的替換值。正則表達式:在開始

不應返回的話,如:AAA%AAA(%不是第一個字符)和\%詞(百分比被轉義)

這是PHP。我用這個,因爲我從*的.ini文件這裏的一切是一個字符串抓取數據。我刪除了$ _POST示例,因此不會產生誤導。

+1

您還沒有定義的 「字」。您沒有在標記集中包含您正在使用的編程語言或庫。你寫的問題是無法回答的。 – tchrist 2012-02-13 21:58:20

+0

我假設PHP,但爲什麼你需要使用正則表達式來匹配?如果我正在閱讀此權限,我認爲簡單字符串concat會更容易。你能否澄清一下你的問題。 – Hersha 2012-02-13 22:01:03

+0

+1,爲什麼是負面投票-2? – 2012-02-13 22:16:00

回答

0

這一個應該做的罰款:

(?<!\\|\w)%\w+ 

但是它通常是一件壞事不消毒顯示前$ _ POST/$ _ GET /不管。

+0

你的答案如此優雅!這工作完美。 – enchance 2012-02-13 23:22:51

+0

這實際上不允許逃脫逃脫。 '\\%test'不會通過,'%% test'會通過。但是,這可能與OP有關。 – sln 2012-02-13 23:39:18

+0

哦,沒錯。這根本不允許\\%測試或%%測試。 – enchance 2012-02-14 09:51:51

0

在JavaScript或類似的正則表達式引擎,你可以使用:

\B(%\w+)\b 

編輯:
在這種情況下,最終\b是可選的,因爲\w將匹配所需的所有字符,並停止在任何非字char @tchrist指出。

編輯2:這不會匹配\%name

(?:^|\s)(%\w+) 
+0

世界上最後的'\ b'是什麼? – tchrist 2012-02-13 22:21:30

+0

字邊界。在這種情況下是可選的,因爲多字規範。感謝您指出。我將添加一個編輯到我的答案。 – rcdmk 2012-02-13 22:25:21

-1

像這樣的事情將是有益的。

$string = "Hello %name from %city "; 

$name = "Joe"; 
$city = "Boston"; 
$array = array(); 


preg_match("/%\w+/",$string,$array); 

foreach($array as $string1) 
       echo "match: ".$string1; 
+1

這不會正確處理'\%please \%do not%switch \%these'。 – CanSpice 2012-02-13 22:32:06

+1

這將匹配'anythingHere%anyOtherThing'。 – rcdmk 2012-02-13 22:33:27

+0

這不是完美的解決方案,只是一個開始。你的評論是正確的 – 2012-02-13 22:33:45

0

這看起來可能有效。這對齊甚至可以逃脫。 -

(?<!\\)(?:\\.)*(?<![%\w])%(\w+)

擴大 -

(?<!\\)  # Not an escape behind us 
(?:\\.)* # 0 or many esc plus anything 
(?<![%\w]) # not % nor \w behind us 
%(\w+)  # % then capture grp1 bunch of word chars