如何在PHP中匹配感叹号(!)?

如何在PHP中匹配感叹号(!)?,php,regex,Php,Regex,我想匹配以开头的驼峰大小写单词例如!RedHat包含在$line中。我正在将PHP5.3.10-1ubuntu2与Suhosin补丁(cli)一起使用 我正在尝试以下事情: $line=preg_replace(“!([A-Z])”、“$1”、$line) 结果:PHP警告:preg_replace():无结尾分隔符“!”找到 $line=preg\u replace(“\!([A-Z])”、“$1”、$line) 结果:PHP警告:preg_replace():分隔符不能是字母数字或反

我想匹配以
开头的驼峰大小写单词例如
!RedHat
包含在
$line
中。我正在将PHP5.3.10-1ubuntu2与Suhosin补丁(cli)一起使用

我正在尝试以下事情:

  • $line=preg_replace(“!([A-Z])”、“$1”、$line)
    
    • 结果:
      PHP警告:preg_replace():无结尾分隔符“!”找到
  • $line=preg\u replace(“\!([A-Z])”、“$1”、$line)
    
    • 结果:
      PHP警告:preg_replace():分隔符不能是字母数字或反斜杠
  • $line=preg_replace(“[!]”([A-Z]),“$1”,$line)
    
    • 结果:
      PHP警告:preg_replace():未知修饰符“(”
  • $line=preg\u replace(“[\!]”([A-Z]),“$1”,“$line”);
    • 结果:
      PHP警告:preg_replace():未知修饰符“(”

如何正确匹配PHP regexp中的

您需要在正则表达式中使用分隔符-非字母数字,错误消息指出:

$line = preg_replace("/ !([A-Z])/", " $1", $line);
请注意正则表达式字符串开头和结尾的
/
字符

这些不必是
/
-您可以使用
甚至
-但是如果您使用
,则需要在正则表达式本身内转义
字符。

尝试以下方法:

!\b([A-Z][a-z]*){2,}\b
现场预览:
(检查全局和多行)。

您不需要逃避
@BartKiers是的,我知道-我刚刚复制了他的一个随机选项-结果是第二个。我现在更新了答案。@OP请注意,要使用php的正则表达式函数,必须用“随机”(自选)分隔符括住表达式。这可以是/(如示例中所示),但也包括&、*,或其他任何内容。但几乎所有在internet上找到的示例都忽略了这些附件(这是正确的),所以不要忘记它们:)我不会称它们为普通分隔符。我认为PHP是唯一一种正则表达式需要在字符串中并且需要分隔符的语言。在其他地方,它只是这两种语言中的一种。@Joey:“normal”在PHP的意义上,它们不必是“/”—只需要在开头和结尾相同,并且不是字母数字。使用“!”作为分隔符没有什么错,但是你需要避开它。但我相信你知道这一点。我在
!\b[a-Z]中更新了我的答案单词边界
可以省略:在
和字母之间总是有一个
\b
。OP的问题是分隔符,Aleks在回答中已经提到了。