Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用正则表达式提取字符串中间的位_Php_Regex_Pcre - Fatal编程技术网

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

Php 如何使用正则表达式提取字符串中间的位,php,regex,pcre,Php,Regex,Pcre,使用PHP PCRE正则表达式,我想提取字符串的中心部分,其中的任何一方都可能出现,也可能不出现。即 n bedroom property type in some town 我想用一个正则表达式提取“属性类型”。我不知道财产类型的所有可能性,但一致的是起始位(总是“\d卧室”)和结束位(总是“在某个城镇”)。此外,起始位或结束位(或两者)可能不存在 也就是说,主题字符串可以是 6 bedroom ground floor flat in Edinburgh house in Manches

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

n bedroom property type in some town
我想用一个正则表达式提取“属性类型”。我不知道财产类型的所有可能性,但一致的是起始位(总是“\d卧室”)和结束位(总是“在某个城镇”)。此外,起始位或结束位(或两者)可能不存在

也就是说,主题字符串可以是

6 bedroom ground floor flat in Edinburgh

house in Manchester

3 bedroom apartment
所以我想分别提取“底层公寓”、“住宅”和“公寓”

像这样的东西(不太管用)

这个
#(((?\d+)\s+卧室)\s+(?。+)\s(在\s+(?\w+))\n#i
可以工作,我想,但是您需要在测试字符串的末尾添加一个额外的换行符

这个
#((?\d+)\s+卧室)\s+(?。+?)\s(在\s+(?\w+))\n#i
的一个例子我认为是可行的,但是您需要在测试字符串的末尾添加一个额外的换行符


一个示例

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

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

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

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

“分别使用一个正则表达式。”---为什么你想要一个丑陋而复杂的正则表达式,而不是几个简单且易于维护的正则表达式?我不能编写任意的PHP代码作为框架的一部分。正则表达式输入一个只接受一个正则表达式的解析器。“分别使用一个正则表达式。”---为什么你想要一个丑陋而复杂的正则表达式,而不是几个简单且易于维护的正则表达式?我不能编写任意的PHP代码作为框架的一部分。正则表达式输入一个只接受一个正则表达式的解析器。谢谢3on,但我无法让它工作。我不知道这是什么类型的regExp:(?
(?
)这是一种为匹配项命名的方法,使以后使用它们更容易。不是所有的php版本都支持它。谢谢3on,但我无法让它工作。我不知道这是什么类型的regExp:(?
(?
这是一种为匹配项命名的方法,使以后使用它们更容易。并非所有php版本都支持它。