在PHP正则表达式中,“~”字符代表什么意思?

5
在以下内容中,符号“~”表示什么意思?
preg_match_all("~<img [^>]+>~", $inputw, $output);

我猜它们是类似于^和$的起始和结束标记。

我猜它们是起始和结束标记,比如^和$。看起来你自己回答了你的问题。 - Shankar Narayana Damodaran
4
@ShankarDamodaran,不过事实并非如此——它们与^$没有任何关系... - OGHaza
3个回答

8

这是一个定界符

定界符可以是任何非字母数字、非反斜杠、非空格字符。


4

正如Nambi所说,您可以在正则表达式中自由选择分隔符。但是,如果分隔符出现在模式中,则必须进行转义处理。了解这一点后,请想象以下情况

'/\/var\/www\/test/' # delimited with /
'~/var/www/test~' # delimited with ~

最后一个示例不需要转义/,因为分隔符现在是~。更加简洁明了了吧?

一般建议使用不与模式本身相同的分隔符,我猜~作为/的替代品广泛分布,因为它很少出现在真实世界的模式中。


@Nambinarayanan的链接指出:如果分隔符在模式内经常出现,为了增加可读性,选择另一个分隔符是个好主意。 ;) - loveNoHate
@dollarvar 你知道他们说的关于链接的话吗? - OGHaza
1
@dollarvar,据我判断,你认为在SO上包含答案的关键部分会更好。我猜你之所以觉得这个答案是多余的,是因为提供的链接已经包含了相同的内容,但我可能弄错了。 - OGHaza
@dollarvar 我同意OGHaza的观点(否则我就不会回答了)。我认为在这里说1或2句额外的话是可以的。 - hek2mgl
@OGHaza 啊,不是的,你必须从你的评论中排除两件事情:a)我可能有点困惑,但你是在说,另一个回答者没有包含足够的信息吗?b)不是的,我只是提供了链接的内容,因为它很匹配并且支持这个答案,但是他后来添加了更多内容,然后它似乎有点多余,哈哈,我应该删除这条评论吗? - loveNoHate
显示剩余2条评论

0

他们不告诉你的肮脏小分隔符秘密 ->
http://uk.php.net/manual/en/regexp.reference.delimiters.php

示例:

成对的分隔符 (原始文本:\d{2}Some\{33\}\w{5})

{\d{2}Some\\{33\\}\w{5}} 解析为 \d{2}Some\\{33\\}\w{5}
{\d{2}Some\{33\}\w{5}} 解析为 \d{2}Some{33}\w{5}

非成对的分隔符 (原始文本:\d{2}Some\+33\+\w{5})

+\d{2}Some\+33\+\w{5}+ 解析为 \d{2}Some+33+\w{5}
+\d{2}Some\\+33\\+\w{5}+ 无法解析,因为定界符未转义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接