这个正则表达式如何工作?

时间:2013-02-08 07:48:14

标签: regex

你能解释这个正则表达式。

$price = "...555.55";
$price  = preg_replace('/^./', '', $price);

输出:

 $price = ..555.55;

2 个答案:

答案 0 :(得分:3)

正则表达式'/^./'匹配字符串开头的任何字符。

  • dot(.)匹配除newline字符和
  • 之外的任何字符
  • caret(^)用于在开头匹配。

因此,您的preg_replace正在用空字符串替换开头的任何字符。 因此,在替换第一个...555.55后,..555.55变为.

如果您只想从头开始替换所有dots(.),那么您必须在正则表达式中转义.。因为简单地使用.将匹配任何字符。此外,您需要使用一些量词 - *+来替换更多dots(.)

所以,你的正则表达式是:

preg_replace('/^[.]+/', '', $price);

或:

preg_replace('/^\.+/', '', $price);

答案 1 :(得分:1)

/^./匹配字符串开头后的第一个字符。

  • //分隔正则表达式。
  • ^匹配字符串开头的位置
  • .匹配任何字符,除非它是一个换行符)。

该匹配将被空字符串('')替换。

如果要替换前三个字符:

$price = preg_replace('/^.{3}/', '', $price);

如果要替换字符串开头的所有点,则需要转义它们并应用量词(+表示“一个或多个”):

$price = preg_replace('/^\.+/', '', $price);

如果你想替换字符串开头的所有非数字(这可能更有意义):

$price = preg_replace('/^\D+/', '', $price);