如何使用正则表达式提取字符串中间的位

时间:2011-09-25 12:00:01

标签: php regex pcre

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

n bedroom property type in some town

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

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

之一
6 bedroom ground floor flat in Edinburgh

house in Manchester

3 bedroom apartment

所以想分别提取'地下平面','房子'和'公寓'。

像这样的东西(不太合适)......

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

2 个答案:

答案 0 :(得分:4)

将锚点添加到正则表达式并声明第一个最后一个组不被捕获:

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

答案 1 :(得分:1)

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

示例here