2013-04-02 2 views
0

Я хочу совместить в PHP последний символ заглавной буквы (http://php.net/manual/en/function.ucfirst.php) в строке.Regex в PHP, чтобы найти последний символ верха из Case Camel

Чтобы добавить к сложности, я хочу игнорировать все после другой строки, например. последовательность верхних регистров, которые не капитализируются или в стиле верблюда.

Здесь следуют некоторые примеры того, что должно и матч не должны

спичек:

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](?!((?!/\*).)*\*/) 

но не удался. От Вопрос: Regexp match any uppercase characters except a particular string (Очень похожая ситуация)

@edit

И еще регулярное выражение

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

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

+2

Какие Regex вы пробовали до сих пор? – hek2mgl

+0

'(?! A _) [AZ] (?! ((?!/\ *).) * \ * /)' –

+1

@ hek2mgl Я задал вопрос и добавил пример в php скрипте –

ответ

2

Я считаю, что это соответствует, когда это необходимо, и будет игнорировать и другие ваши примеры.

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

See this fiddle

+0

Приятно сделать! Спасибо. –

+0

Добро пожаловать. Довольно личная проблема! – keelerm

+0

Если вы не спрашиваете слишком много, можете ли вы объяснить свое регулярное выражение? –

1

попробовать это

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

это работает с каждым из ваших примеров:

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

+0

Я создавая скрипку и пытаясь сейчас! –

+0

О, извините, я не видел этого 'fooBAR => Ожидаемый символ: B (Самая сложная ситуация)'. нужна дополнительная минута, чтобы думать :) – dimaninc

+0

Посмотреть результат http://phpfiddle.org/main/code/dyq-3h7 :( –

1

Если я правильно Вас понял, Вы в основном хотите последнюю букву в верхнем регистре, не предшествует другой прописной буквы. В этом случае попробуйте следующее:

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

Затем просто получите первый подшаблон.

+0

Это будет соответствовать/* Комментарий */line Я верю. – keelerm

+0

Совпадения, но спасибо, например, я буду продолжать пытаться. См. Пример yor http: // phpfiddle. org/main/code/802-hgp –