Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在字符串句子中查找具有特殊字符的单词_Php_Regex_Regex Negation - Fatal编程技术网

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

Php 如何在字符串句子中查找具有特殊字符的单词,php,regex,regex-negation,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而不是I,love。cookies(或cookies:

我想知道你如何在一个句子中找到具有特殊字符的词,在所有的一般情况下

例如,如果我们有下面的句子

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
而不是
I
love
cookies
(或
cookies:

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

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

但是否定不起作用,我把每个单词都取回(“我”、“爱”…“cookies:”)。

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

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

((\w*[\$\[\]\@\%]+\w*)+?)[ ,:]*
如果可以,请在源字符串的末尾添加一个空格,以便在不丢失最后一个单词的情况下使用强制分隔符:

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

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


如果你有
$
,你可以试试为什么要用
$
呢?试试
\B\$\S*
或者一个更具体的
\B\$\w+\[\d*]
,它在php中用作模式指示器。另外,我忘了添加其他案例,格式的问题让我有点困惑。也许你需要?试试这个:它看起来像“Edward'S”也though@LongLe当然。因为撇号对我来说似乎是一个特殊的字符。但是,您可以将此符号添加到此组
[^:,\w]
。应该会有帮助。谢谢。虽然它看起来有点野蛮,但它确实工作得很好。@LongLe是的,我的正则表达式中有一些缺陷,但如果我尝试修复它们,它会更复杂。更简单越好:)