需要正则表达式的帮助。
1)格式:
Advisor Geologist – HighMount Exploration & Production LLC – Oklahoma City, OK
我想在最后一个角色和破折号之间获取文字。即。 Oklahoma City, OK
。请注意,文本可能包含多个破折号。
试过这个:
~-([.*$]+)~
尝试在短划线和字符串结尾之间(。* $)。需要知道如何检查破折号的最后一次出现。
答案 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);