#regex
#регулярное выражение
Вопрос:
Я пытался извлечь слова, которые окружены *
, из строки, используя регулярные выражения, такие как строка *sample*
, из которой я хочу извлечь sample
, но я не могу создать правильное регулярное выражение.
Я попробовал следующее регулярное [*]{1}.*[*]{1}, ^[*]{1}.*[*]{1}$?
выражение, но оно не работает.
Ответ №1:
Возьмем следующий пример:
this is a *sample* string, but not *really*
В первой захваченной группе будут совпадать следующие sample* string, but not *really
:
*(.*)*
В то время как следующее будет соответствовать sample
первой захваченной группе:
*([^*]*)*
Комментарии:
1. Я бы выбрал это. Если ваши регулярные выражения поддерживают стеснительное сопоставление, альтернативной формулировкой для последнего будет
*(.*?)*
.
Ответ №2:
Первый для меня работает нормально. Вы могли бы просто добавить группу захвата в скобках:
[*]{1}(.*)[*]{1}
Однако это очень многословно. Вы можете просто сделать:
*(.*)*
Вы экранируете * с помощью , потому что это специальный символ.
Ответ №3:
Попробуйте это:
*[^*]**
Это означает *
: *, [^*]*?
0 или более не-*, *
: *
http://gskinner.com/RegExr?2v0e4
Теперь, если вы не хотите «извлекать» *
, вы можете сделать это:
(?:*)([^*]*)(?:*)
Это поместит только текст в группу захвата ( ( )
часть) и поместит *
в группы без захвата ( (?: )
часть)
Ответ №4:
Вы можете попробовать это регулярное выражение
(?<=*).*(?=*)
Если ваш язык программирования поддерживает поиск сзади и вперед. Если вы хотите сопоставить минимально возможный текст между двумя *
s, вы можете использовать отложенный квантификатор следующим образом
(?<=*).*?(?=*)
Комментарии:
1. Что это будет делать с
"*this*that*"
или"*this* and *that*"
?2. @muistoosh Да, это жадный квантификатор, он максимально соответствует двум
*
с. Также включен ленивый квантификатор, чтобы было понятно.