【问题标题】:PHP regex match numbers from string before specified character [duplicate]PHP正则表达式匹配指定字符之前的字符串中的数字[重复]
【发布时间】:2016-04-27 14:12:28
【问题描述】:

我有一个字符串,它的输出结果可能是这样的:

First : 14:15
Second: 14:2
Third: 10:2
Fourht: 1:20
Fifth: 1:5

我的正则表达式只匹配上面的第一个和第三个示例:

/(^[0-9]{2})/

如果有像 1:10 或 1:2 这样的输出,则没有输出(错误)。

想要的结果:

14
14
10 
1
1

我可以用 preg_replace() 或其他方法来做吗?我也需要更改我的正则表达式吗?如果是这样,我应该使用哪个正则表达式来匹配“:”字符之前的数字?

感谢您的信息和帮助!

【问题讨论】:

  • 为什么不在: 上爆炸并从结果数组中挑选出第二个元素? explode(':', 'First : 14 : 15')[1]?
  • 等等,你的输入看起来像14:15等吗?然后只是explode,真的。如果已知字符串只包含用: 分隔的数字,那么这是唯一的最佳选择。

标签: php regex string replace preg-replace


【解决方案1】:

重申一下,正则表达式不是适合这项工作的工具。

$output = explode(":",$input)[0];

【讨论】:

  • 得到它的工作与你的答案:)
  • 但我相信正则表达式也可以3v4l.org/bkRj3
  • 你的方法也行不通3v4l.org/Qm3ft
  • @Shafizadeh 如果你有正确的输入,它确实有效 - 这个问题的措辞非常糟糕,但输入更像$first = "14:15";
【解决方案2】:

搞定了!

preg_match_all('(^(.*):)', $string, $matches);
echo $matches[1][0]; // output is right! 14, 14, 10, 1, 1

https://regex101.com/r/aZ5uQ6/1

感谢您的想法!

【讨论】:

  • 如果您的字符串包含超过 1 个:,这将不起作用。
  • Regex 不是这项工作的正确工具。
  • 嗯...我会牢记这一点!目前它不包含多个。谢谢!
  • 你在这个例子中显示的输入不是你在问题中写的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 2020-06-30
  • 2023-03-09
  • 2019-03-22
相关资源
最近更新 更多