2016-03-16 28 views
1

我想知道如何在一個句子中找到帶有特殊字符的單詞。如何在字符串句子中查找帶有特殊字符的單詞

例如,如果我們有如下的句子

I love (#coo$kies) the following cookies: $cookie[1], $cookie[2, @cookie, @cookie%, [email protected] 

拋開事實,這是多麼不變量應該在一個字符串中使用。什麼是檢索正則表達式 '#$首席運營官KIES' $cookie[1]$cookie[2@cookie@cookie%[email protected]而不是Ilove ... cookies(或cookies:)。

我用下面的正則表達式:

'#(\S+(?!\w+))#' 

但否定不工作了,我讓每一個背單詞(「我」,「愛」 ......「曲奇」)。

+0

爲什麼使用'#'如果你有'$'?嘗試使用'\ B \ $ \ S *'或更具體的'\ B \ $ \ w + \ [\ d *]' –

+0

#在php中用作模式指示符。此外,我忘了添加其他情況 –

+1

嗯,格式化的問題讓我感到困惑。也許你需要['\ S * [^ \ w \ s:;。,?!] [^ \ s \ p {P}] *'](https://regex101.com/r/uM2rK9/2)? –

回答

1

試試這個:

(?:^|)+((\w*?[^ :,\w]+?\w*?)*)(?: |,|: |$)

你可以試試它here

+0

它似乎拿起像「愛德華」的東西,以及 –

+0

@LongLe當然。因爲撇號對我來說似乎是一個特殊的字符。但是,您可以將此符號添加到此組[':\ w]'中。它應該有所幫助。 – max

+0

謝謝。雖然它似乎有點暴躁,但它當然運作良好。 –

1

無法取得$cookie[2],因爲它不在源字符串中。

其餘的你需要分隔單詞分隔符[ ,:]和特殊字符,這是字的一部分:[\$\[\]\@\%]。它應該是這樣的:

((\w*[\$\[\]\@\%]+\w*)+?)[ ,:]* 

如果可以,添加一個空格到源字符串的結尾,所以你可以使用強制分隔符不失去最後一個字:

((\w*[\$\[\]\@\%]+\w*)+?)[ ,:]+ 
相關問題