如何在字符串句子中查找带有特殊字符的单词

时间:2016-03-16 12:49:59

标签: php regex regex-negation

我很想知道如何在句子中找到带有特殊字符的单词。

例如,如果我们有以下句子

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

抛开不应该在字符串中使用变量的事实。检索' #coo $ kies'的正则表达式是什么? $cookie[1]$cookie[2@cookie@cookie%hot@dog而非Ilove ... cookies (或cookies:)。

我使用了以下正则表达式:

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

但是这种否定是行不通的,我会回复每一句话("我","爱" ..." cookies:" )。

2 个答案:

答案 0 :(得分:1)

无法获取$cookie[2],因为它不会出现在源字符串中。

对于其他内容,您需要分隔单词分隔符[ ,:]和特殊字符,它们是单词[\$\[\]\@\%]的一部分。它应该是这样的:

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

如果可以,请在源字符串的末尾添加一个空格,这样就可以使用强制分隔符而不会丢失最后一个字:

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

答案 1 :(得分:1)

试试这个:

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

您可以尝试here