此模式的PHP正则表达式

此模式的PHP正则表达式,php,regex,preg-match,Php,Regex,Preg Match,需要正则表达式的帮助 1) 格式: 我想得到最后一个字符和破折号之间的文本。俄克拉何马州俄克拉何马市。注意:文本可能包含多个破折号 我试过这个: ~-([.*$]+)~ 正在尝试介于破折号和字符串(.*$)的结尾之间。需要知道如何检查破折号的最后一次出现。不需要正则表达式、破折号上的字符串和最后一个元素 $str = 'Advisor Geologist – HighMount Exploration & Production LLC – Oklahoma City, OK'; $ar

需要正则表达式的帮助

1) 格式:

我想得到最后一个字符和破折号之间的文本。俄克拉何马州俄克拉何马市。注意:文本可能包含多个破折号

我试过这个:

~-([.*$]+)~

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

不需要正则表达式、破折号上的字符串和最后一个元素

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

效率更高。

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

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

测试此演示

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

'/\s*([^-]+)\s*$/'
让我们看看它是如何工作的:

  • \s*
    匹配零个或多个空白字符(空格、制表符等)
  • ([^-]+)
    匹配一个或多个非破折号的字符
  • \s*
    匹配零个或多个空白字符(空格、制表符等)
  • $
    匹配字符串的结尾
请注意,您文章中的
-
字符不是简单的破折号。
是其他Unicode字符。如果还需要匹配,则应通过以下方式更新正则表达式:

'/\s*([^-–]+)\s*$/'
下面是一个代码示例:

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

 $str = 'Advisor Geologist – HighMount Exploration & Production LLC – Oklahoma City, OK';
 $result = trim(substr($str, strrpos($str, '-')+1));
对于固定格式,您可以使用
list()&explode()


你试过什么?让我们看看你试过什么,这样我们就有了一个起点。你试过什么吗?请参阅开始使用PHP中的正则表达式。抱歉,我的question@m.buettner-你不知道OP为什么要求正则表达式解决方案-也许他需要正则表达式,而任何非正则表达式解决方案都毫无价值!你怎么知道OP不需要正则表达式?你看不到他正在研究的问题的全貌。。。有时用户需要正则表达式,因为他们使用的工具或库与正则表达式一起工作,而不是实际的PHP代码…问题的全貌在OP中描述,除非我被认为是一个读心术的人?如果OP不需要正则表达式,您的解决方案非常好。您还应该提供一个regex替代方案-这是我的观点…这将是一个很好的解决方案,但请注意,
$str
中的那些字符不是破折号,它们是其他字符。并不特别需要regex。想不出一个不是正则表达式的解决方案。这非常有效。我不知道
end()
所以谢谢!使用此模式,您需要修剪空间,然后。。。另外,如果
-
是第一个、最后一个或是只有一个(在回答您对问题的评论时)是肯定的,我没有因为您的解决方案使用了正则表达式而否决您的解决方案,而是因为它没有满足问题中所述的规范,那么就不需要在
-
中转义
-
。虽然我仍然喜欢非正则表达式的解决方案,但这一个得到了我的支持票,因为(出于一些奇怪的原因)OP实际上可能需要一个正则表达式。这一个工作得很好;)(与上一个相反)@BotondBalázsΩmega之前发布了一个不同的解决方案,这是我提到的解决方案,但当我
var_dump()
$匹配时,我只得到了整个字符串。我输入的字符串是“德克萨斯州达拉斯-休斯顿全球招聘公司勘探副总裁”@iamjonesy,那是我的错。我将正则表达式调整为您在问题中使用的破折号字符(不是
-
,而是
-
)。再次对其进行调整,使其可以同时处理两个字符。再试一次please@m.buettner:对不起,我完全误解了。我将删除我的评论。
 $str = 'Advisor Geologist – HighMount Exploration & Production LLC – Oklahoma City, OK';
 $result = trim(substr($str, strrpos($str, '-')+1));
 $str = 'Advisor Geologist – HighMount Exploration & Production LLC – Oklahoma City, OK';
 list($occupation, $company, $city) = explode('-', $str);