首页 > 解决方案 > PHP Regex 仅匹配一些字母/单词和标点符号

问题描述

不确定这是否是正确的方法,如果您有更好的方法,请加入:

我有一系列需要匹配的数据代码。代码本身被刮掉并从其他文本中分离出来,但它们的位置和带有该文本的标记只有大约 70% 的一致性。我认为使用正则表达式可能是一种更好的方法,不仅可以获取异常值,还可以获取所有异常值,因为代码非常标准,但我不确定如何仅使用“某些”字母/括号/asterix/等来定位字符串。这是我的测试示例:

3-301.11(C)*
3-501.16 (Cold)
5-202.11(A)
3-501.16 (Hot)
6-501.111(C)*
7-201.11(A)*

大多数代码都可以正常返回:

5-103.11

我可以使用这个表达^[0-9]+[-]+[0-9]+[0-9]+[.]+[0-9]+[0-9]来定位其中的大部分,但结局让我失望

我在这里设置了示例:

https://regexr.com/3smmj

编辑

刚刚尝试了弗兰克将 (.*) 添加到我的解决方案,它有效,但打开了一个新问题。由于这些代码嵌入在文本中,因此我的测试样本应该在代码之后包含其他文本。我已经更新了链接/测试示例。

解决方案 感谢大家的帮助。我用(现在)工作解决方案更新了链接。

^\d+-\d+\.\d+(?:\s*\([^()]*\)\*?)?

标签: phpregex

解决方案


从您展示的代码中,您可以大大简化此模式:

/\d+-\d+\.\d+/

解释:

  • 一个或多个数字
  • 然后是破折号
  • 一个或多个数字
  • 然后是一段时间
  • 一个或多个数字

请注意,无需[]像您那样输入单个字符;事实上,[-]会被误解,因为-inside[]被解释为范围运算符,例如[0-9].


推荐阅读