【发布时间】:2023-03-24 15:28:01
【问题描述】:
我正在尝试使用以下正则表达式来检查字符串是否为小数位为零或 2 的正数:
^\d+(\.(\d{2}))?$
当我尝试使用 preg_match 进行匹配时,出现错误:
警告:preg_match():在第 862 行的 /Library/WebServer/Documents/lib/forms.php 中找不到结束分隔符 '^'
我做错了什么?
【问题讨论】:
标签: php regex preg-match
我正在尝试使用以下正则表达式来检查字符串是否为小数位为零或 2 的正数:
^\d+(\.(\d{2}))?$
当我尝试使用 preg_match 进行匹配时,出现错误:
警告:preg_match():在第 862 行的 /Library/WebServer/Documents/lib/forms.php 中找不到结束分隔符 '^'
我做错了什么?
【问题讨论】:
标签: php regex preg-match
错误是关于缺少分隔符 / 或 # 等,请确保将正则表达式包含在分隔符中:
if (preg_match('/^\d+(\.(\d{2}))?$/', $text))
{
// more code
return true;
}
或者:
if (preg_match('#^\d+(\.(\d{2}))?$#', $text))
{
// more code
return true;
}
【讨论】:
/ 和#,您可以使用任何非字母数字(不包括空格和反斜杠),例如*, @, |, !,..... 都是有效的分隔符。
some weird /#/ string 的时间(嘿,您永远不会知道!)您可能会发现使用! 作为分隔符更容易! :)
对于 PHP 的 preg 函数套件,正则表达式必须用分隔符指定,例如 /;例如,/[a-z]/ 将匹配从a 到z 的任何字符。当您给它字符串"^\\d+(.(\\d{2}))?$" 时,它希望将正则表达式视为\\d+(.(\\d{2}))?$,由^s 分隔,但它找不到第二个^。因此,修复就像"/^\\d+(.(\\d{2}))?$/" 一样简单,您需要修复的另一件事是.;这是一个将匹配 any 非换行符的元字符;对于文字时间段,您需要\.。这为您提供了正则表达式"/^\d+(\.(\d{2}))?$/"。另外请注意,如果您不想要捕获组,可以使用"/^\d+(?:\.(\d{2}))?$/",这会将小数点后的数字放在$1 中,而不是$2。
【讨论】: