2015-07-21 60 views
1

當前正則表達式:正則表達式排除一切,但是,個別

([^ipd]) 

我得到正確的輸出,雖然它沒有單獨取消選擇。我只想單獨取消選擇ipd

旺旺:

i 
p 
d 

不想:

ipd 
ip 
pd 
id 

我已經試過:

([^ipd] {1}) 
([^i|p|d$]) 
+0

也許只是:'([IPD])' – 2015-07-21 11:32:19

+0

也許,你正在尋找捕捉人物'i','p','D'的長字符串?例如。如[[([ipd])'](https://regex101.com/r/pD5vN6/1)中所示?請注意,在這種情況下,您不必設置捕獲組,因爲您始終可以用'\ 0'來引用第0組。你需要澄清你在問題中需要什麼。 –

+0

對不起,我的意思是**取消選擇** – Rahul

回答

0
^[ipd]$ 

您需要添加錨以將匹配限制爲僅限於i,p,d

$re = "/^[ipd]$/m"; 
$str = "i\np\nd\n\nDon't Want\nipd\nip\npd\nid"; 

preg_match_all($re, $str, $matches); 
+0

'^ [ipd] $'不適用於我。我只需要一次選擇一個。 – Rahul

+0

@Rahul其工作見https://regex101.com/r/hF7zZ1/3檢查編輯 – vks

+0

@Rahul也許你的字符串中有其他字符(例如尾隨空格)。在這種情況下,請改用^ [ipd] \ s * $。 –

0

這項工作在串並與單獨的字符:

[^ipd]|(?<=[ipd])[ipd]|[ipd](?=[ipd]) 

其中:

  • [^ipd] - 不是 「I」, 「P」 或 「d」;與 「i」,「p」或「d」相匹配的「i」,「p」或「d」;
  • [ipd](?=[ipd]) - 「i」,「p」或「d」,如果它被「i」,「p」或 「d」;

DEMO