2015-04-08 6 views
1

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

table_name AS alias 
table_name alias 

Я пытался с этим

^(.*?)\s*(?:as|\s)\s*(.*?)$ 

и это на самом деле работает, за исключением случая, когда псевдоним начинается с «как».

Рабочие демки: https://regex101.com/r/jX3tK0/1, https://regex101.com/r/wU0dF8/1

Не работает демо: https://regex101.com/r/tY8bK8/1

Как я могу это исправить?

ответ

1

Это из-за мощности вы выбрали , Следующий один должен соответствовать вашим потребностям:

^(.*?)\s+(?:as\s+)?(.*?)$ 

Regular expression visualization

Debuggex Demo

+0

Я принял ваш ответ, потому что это быстрее, чем другие. Благодаря! – Phate01

1

Вы можете потребовать границы слова (\b) после as:

^(.*?)\s*(?:as\b|\s)\s*(.*?)$ 

https://regex101.com/r/tY8bK8/2

В качестве альтернативы, вы можете сделать this:

^(.*?)(?:(\s+as)?\s)\s*(.*?)$ 
Смежные вопросы