PHP Regex用于此模式

时间:2012-11-19 16:55:20

标签: php regex preg-match

需要正则表达式的帮助。

1)格式:

 Advisor Geologist – HighMount Exploration & Production LLC – Oklahoma City, OK

我想在最后一个角色和破折号之间获取文字。即。 Oklahoma City, OK。请注意,文本可能包含多个破折号。

试过这个:

~-([.*$]+)~

尝试在短划线和字符串结尾之间(。* $)。需要知道如何检查破折号的最后一次出现。

4 个答案:

答案 0 :(得分:8)

你不需要正则表达式,explode()短划线上的字符串,并取最后一个元素。

$str = 'Advisor Geologist – HighMount Exploration & Production LLC – Oklahoma City, OK';
$arr = explode( '–', $str);
$last = trim( end( $arr));
echo $last;

效率更高。

答案 1 :(得分:1)

如果您需要使用正则表达式,请使用

$pattern = '/[^\s–-][^–-]*?(?=\s*$)/';
preg_match($pattern, $subject, $matches);

测试此演示 here

答案 2 :(得分:0)

如果你需要一个正则表达式,这是我能想到的最简单的一个:

'/\s*([^-]+)\s*$/'

让我们看看它是如何运作的:

  • \s*匹配零个或多个空格字符(空格,制表符等)
  • ([^-]+)匹配一个或多个不是破折号的字符
  • \s*匹配零个或多个空格字符(空格,制表符等)
  • $匹配字符串的结尾

请注意,帖子中的字符不是简单的破折号。这是其他一些Unicode字符。如果您还需要匹配,那么您应该以这种方式更新正则表达式:

'/\s*([^-–]+)\s*$/'

以下是代码示例:

preg_match(
    '/\s*([^-]+)\s*$/',
    'Advisor Geologist – HighMount Exploration & Production LLC - Oklahoma City, OK',
    $matches);
$city = $matches[1];

答案 3 :(得分:0)

strrpos()也可以提供帮助。

 $str = 'Advisor Geologist – HighMount Exploration & Production LLC – Oklahoma City, OK';
 $result = trim(substr($str, strrpos($str, '-')+1));

对于固定格式,您可以使用list() & explode()

 $str = 'Advisor Geologist – HighMount Exploration & Production LLC – Oklahoma City, OK';
 list($occupation, $company, $city) = explode('-', $str);