Я пытаюсь извлечь часть моей строки:
Регулярное выражение, которое я пробовал:
select
regexp(Fullstring ,'^(xi-)?(\[A-Za-z0-9\]+)-.\*','$2') output
Это правильно возвращает вторую строку, но не первую.
Мне нужен результат, это буквенно-цифровое число между ними или оно может быть в начале. «xi» необходимо исключить из результата, так как это не буквенно-цифровое число, мне нужно буквенно-цифровое число, если в начале стоит «xi», я хочу получить вторую часть строки, я не понял, почему для второй строка отображалась правильно, но для первой отображалось «xi». третий - лучший вариант, поскольку в начале нет xi.
Какая у вас база данных SQL (например, MySQL, SQL Server, Oracle, Postgres, DB2)? Нам необходимо это знать, чтобы ответить на ваш вопрос.
какие базы данных вы используете?
Вы отметили SQL Server. Здесь нет функции regexp, поэтому я удалю этот тег.
«Это правильно возвращает вторую строку, но не первую». Это просто неправда, ваш вопрос; на SQL Server возвращает ошибку «регулярное выражение не является распознаваемым именем встроенной функции». db<>fiddle Вы используете предварительную версию базы данных SQL Azure (в которой, как я полагаю, есть некоторые функции регулярных выражений) или что-то в этом роде?
@ThomA - Ни один не называется regexpdevblogs.microsoft.com/azure-sql/…
Да, признаюсь, я не знал, каковы были новые (предлагаемые?) имена функций, @MartinSmith.





Я не знаю, какой вариант регулярного выражения вы используете, обычно мы
не выйдет за скобки. Но это может быть связано с синтаксисом
ваш механизм регулярных выражений. Вам решать, нужны они вам или нет (также
для \* вместо *). Единственный документ, который я нашел, это эта страница о
Функция Denodo VQL regexp() и она
упоминает синтаксис Java или Perl.
Но чего не хватает, так это необязательного символа подчеркивания «_» в вашем
шаблон.
В Perl или PHP это будет: ^(xi-)?(([A-Za-z0-9]+)_?)-.*
Демо здесь: https://regex101.com/r/DCxixu/1
Я добавил группу захвата, чтобы вы могли решить, хотите ли вы использовать
полную группу с помощью подчеркивания или если вы хотите ее удалить. Вы могли бы даже
замените _? на _*, если их может быть несколько.
Объясните, почему
xiне подходит? Предоставьте более подробное описание того, что можно и что нельзя сопоставлять.