0

我想在 PHP 中匹配字符串中的最后一个大写(http://php.net/manual/en/function.ucfirst.php)字符。

为了增加复杂性,我想忽略不同字符串之后的所有内容,例如一系列未大写或驼峰式风格的大写字母。

下面是一些应该和不应该匹配的例子

火柴:

Foobar => Expected char: F
fooBar  => Expected char: B
A_fooBar  => Expected char: B
fooBAR => Expected char: B (Most complicated situation)

无匹配:

foo A_bar
foobar
foo bar foo bar
foobar /* Comment */

到目前为止,我已经尝试了以下正则表达式:

(?!A_)[A-Z](?!((?!/\*).)*\*/)

但没有运气。来自问题:正则表达式匹配除特定字符串之外的任何大写字符(非常相似的情况)

@编辑

还有另一个正则表达式

/([A-Z])[^A-Z\W]*$/

http://phpfiddle.org/main/code/dyq-3h7

4

3 回答 3

2

我相信这在适当的情况下匹配,并且也会忽略您的其他示例。

^\w*?(?<![A-Z_])([A-Z])(?!_)

看到这个小提琴

于 2013-04-02T23:55:41.430 回答
1

试试这个

/([A-Z])([A-Za-z]|[^_\*\/])*$/

这适用于您的每个示例:

http://phpfiddle.org/main/code/sgb-7m

于 2013-04-02T23:37:42.730 回答
1

如果我理解你的话,你基本上想要最后一个没有另一个大写字母的大写字母。在这种情况下,试试这个:

/.*(?<![A-Z])([A-Z])/

然后只需获取第一个子模式。

于 2013-04-02T23:52:53.280 回答