正则表达式 - 从字符串的末尾搜索

时间:2012-10-12 21:56:12

标签: php regex

如何从字符串末尾定位内容:
complexthing---50 other-_-50 MORE__------50

我希望最终得到(50)但这个"复杂的东西 - "可以结束 - 所以在这种情况下,我不能打破" - "从乞讨中可能会让人感到困惑所以对我来说最简单的正则表达方式就是让它在最后得到任何东西并在" - "

-(.*)

每隔50 总是有 - 来分隔数字和字符串,我想定位数字(50)

3 个答案:

答案 0 :(得分:8)

如果我理解正确的话,这样的事可能有用:

-(\d+)$

在字符串结尾($)之前匹配连字符( - )后跟一个或多个数字(\ d +)。仅捕获数字((...))。

答案 1 :(得分:1)

想想你的要求:

  • 一个始终位于字符串末尾的数字
  • 紧跟-字符的数字。
  • -个字符有关的字符,它本身不是-个字符。

这些都是用来表达问题的不同方法,随着时间的推移变得越来越不具体。任何这些都可能适合您的需求,但我将覆盖每个案例,以展示它是如何做的。

这些可以用许多不同的方式拼写。根据您正在使用的正则表达式风格,其中一些方法可能需要以不同方式进行转义(例如,X+ vs X\+ vs XX*),并非所有方式都可以支持所有口味。

“始终位于字符串末尾的数字”:

([0-9][0-9]*)$
([0-9]+)$
(\d+)$

正则表达式模式为greedy,即:它们尽可能匹配。所以在第一种情况下,要求字符串末尾至少有一个数字(“在字符串末尾”指定为$),最终会在字符串末尾给出整个数字

“紧跟-字符后面的数字”:

-([0-9][0-9]*)
-([0-9]+)
-(\d+)

这里,我们指定它应该遵循-字符,而不是指定“字符串的结尾”。由于[0-9]-字符本身不匹配,因此我们无需执行任何其他操作来避免捕获-

“跟随一个字符的东西,它本身不是一个字符”:

-([^-][^-]*)
-([^-]+)

这个有点棘手:我们只是通过指定否定匹配([^X])来指定我们想要破折号,而不是指定我们想要一个数字。有时匹配字符类中的-字符可能很棘手,但规则是“始终在开头”指定-,您应该没问题。< / p>

答案 2 :(得分:0)

您可以使用OR运算符|来判断它是否是这个或那个。

相关问题