【问题标题】:How to use regular expression to extract bit in middle of a string如何使用正则表达式提取字符串中间的位
【发布时间】:2011-09-25 12:00:00
【问题描述】:

使用 PHP PCRE 正则表达式我想提取字符串的中心部分,其中任何一方可能出现也可能不出现。即

n bedroom property type in some town

我想使用一个正则表达式提取“属性类型”。我不知道属性类型的所有可能性,但一致的是开始位(它总是'\d 卧室')和结束位(它总是'在某个城镇')。此外,开始位或结束位(或两者)可能不存在。

即主题字符串可以是 ...

6 bedroom ground floor flat in Edinburgh

house in Manchester

3 bedroom apartment

所以想分别提取'ground floor flat'、'house'和'apartment'。

类似这样的东西(不太好用)......

(\s*\d+\s+bedrooms?\s*)?(.*?)(\s+in)?

【问题讨论】:

  • "分别用一个正则表达式。" --- 为什么你想要一个丑陋而复杂的正则表达式而不是几个简单且易于维护的正则表达式?
  • 我无法编写任意 PHP 代码作为框架的一部分。正则表达式输入一个只接受一个正则表达式的解析器。

标签: php regex pcre


【解决方案1】:

在您的正则表达式中添加锚点并声明不捕获 first ant last 组:

/^(?:\s*\d+\s+bedrooms?\s*)?(.*?)(?:\s+in\s.*)?$/

【讨论】:

    【解决方案2】:

    我认为这个#(((?<bedroomCount>\d+)\s+bedroom)\s+)?(?<type>.+?)\s(in\s+(?<city>\w+))?\n#i 有效,但您需要在测试字符串的末尾添加一个额外的换行符。

    一个例子here

    【讨论】:

    • 谢谢 3on,但我无法让它工作。我不知道这是什么类型的正则表达式:(?
    • (?<myVarName> 这是一种为您的比赛命名的方法,它使以后更容易使用它们。不是所有的php版本都支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 2020-09-21
    • 2010-12-15
    • 2020-05-26
    • 2014-10-17
    • 2021-09-25
    相关资源
    最近更新 更多