#java #regex
#java #регулярное выражение
Вопрос:
У меня есть несколько строк, в некоторых случаях строка есть **abc_abc**
, а в некоторых есть **abc_abc** abc abc abc **abc_abc**
, мне нужно выбрать только одну пару «**» (so **abc_abc**
). До сих пор я использовал регулярное выражение, которое, казалось, работало нормально, но я только что заметил, что во втором примере оно подбирает все.
мое регулярное выражение до сих пор было:
\*\*(.*?)_(.*?)\*\*
есть идеи о том, как получить только эту единственную пару звезд?
Любая помощь будет высоко оценена. Заранее спасибо 🙂
Комментарии:
1. С опубликованной вами строкой проблем нет, но вам, вероятно, понадобится
\*\*((?:(?!\*\*)[^_])*)_(.*?)\*\*
( демо )2. Да! Dziekuje! Если вы хотите отправить свой комментарий в качестве ответа, я могу пометить его как правильный 🙂
Ответ №1:
Чтобы избежать совпадения строк, начинающихся с «неквалифицированных» **...**
, вам необходимо настроить первую группу с более конкретным шаблоном:
**((?:(?!**)[^_])*)_(.*?)**
Смотрите демонстрацию регулярных выражений. Подробные сведения:
**
—**
строка((?:(?!**)[^_])*)
— Захват группы 1: любой символ, но_
который не запускает**
подстроку, ноль или более раз, как можно больше_
—_
символ(.*?)
— Захват группы 2: любых нулевых или более символов, отличных от символов разрыва строки, как можно меньше**
—**
строка
Объявление регулярных выражений Java:
String regex = "\*\*((?:(?!\*\*)[^_])*)_(.*?)\*\*";