【问题标题】:Number after dollar sign in regex正则表达式中美元符号后的数字
【发布时间】:2014-01-19 07:36:08
【问题描述】:

我在下面找到了一个代码

<?php $string = 'April 15, 2003'; 
$pattern = '/(\w+) (\d+), (\d+)/i'; 
$replacement = '${1}1,$3';

我只想知道为什么 ${1} 后面的这个 1 被声明,为什么值 3 在字符串符号的结尾之前被赋值?

【问题讨论】:

  • 这是一个正则表达式令牌,$3 是第三个捕获组。
  • 1 只是1
  • 可能的意图是获取给定日期的第一个日期。应该是$replacement = '${1} 1, $3'; 才能成为'April 1, 2003'
  • $3 可能是匹配组 #3,这里是 2003 年。
  • 你没有明白。我也在谈论那个。如果写成$11,那么代码怎么知道它是'$1'.'1' OR $11

标签: php regex


【解决方案1】:

如果你按原样执行代码,你会得到:

April1,2003

这是因为您将变量 $1$11 分隔开来。 Here's more on that.

如果你改变它,你会得到:

,2003

...因为反向引用 $11 不存在。

为什么$3 在结束字符串符号之前声明?因为它是preg_replace backreference 的一部分。如果将其移到替换字符串之外,您会看到它崩溃并烧毁。

脚注:为什么要用&lt;variable&gt;1,&lt;variable&gt; 替换它,这似乎很奇怪。 1 是静态的——因为它永远不会改变。我更倾向于认为你想要一个像 ${1}${2},$3 这样的替换,它会返回 April15,2003

【讨论】:

  • 我们可以写 ${1}${2},${3} 吗?
  • 确定吗?在这种情况下没有理由,但你可以。
  • 谢谢..在一个问题中我看到stackoverflow.com/questions/18027811/… 类似aeiou ..aeiuo 在这里被替换了吗?..
猜你喜欢
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
  • 2019-05-11
  • 2020-03-08
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
相关资源
最近更新 更多