Вы можете использовать это регулярное выражение и захватить содержимое группы 1,
(?:[^_]*_){2}((?:[^_]*_){2}[^_]*)
Демо
Объяснение:
(?:[^_]*_){2}
- эта часть захватывает некоторый текст, содержащий ровно два подчеркивания. ((?:[^_]*_){2}[^_]*)
- эта часть захватывает некоторый текст, который снова содержит некоторый текст, имеющий ровно дваподчеркивание плюс некоторый текст ноль или более символов, отличных от _
, с использованием [^_]*
и прекращение захвата в тот момент, когда оно кажется пятым подчеркиванием, и захватывает этот текст в группу 1.
Впредь, предоставляя вам весь контент междувторое подчеркивание и пятое подчеркивание в группе 1.
Кроме того, в случае, если вам нужно только первое совпадение, а не несколько совпадений, вы можете иметь начальный якорь ^
перед регулярным выражением и использовать его следующим образом:
^(?:[^_]*_){2}((?:[^_]*_){2}[^_]*)
Демонстрация только с первым совпадением
Кроме того, ваше регулярное выражение ^[a-zA-Z]+_[a-zA-Z]+_([a-zA-Z]+_[a-zA-Z]+_[a-zA-Z]+)_
также правильно, но разрешает только алфавиты, поэтому используйте его, если вытолько хочу, чтобы всемежду символами подчеркивания - низкий алфавит, иначе я использую мое регулярное выражение, а мой - немного более компактную форму, поскольку он использует квантификаторы.Кроме того, мое регулярное выражение поможет вам расширить в случае, скажем, завтра вы говорите, что я хочу сопоставить весь контент между подчеркиванием от N
до Mth
, где N
и M
могут быть большими числами, и в этом случае это короткое регулярное выражениепоможет.