(.[^_]+)
Соответствует правильно, когда нет подчеркивания, как я могу изменить это регулярное выражение, чтобы соответствовать, когда нет знака подчеркивания только перед знаком вопроса?
есть. игнорировать любые подчеркивания после?
Это разрешит подчеркивание только после знака вопроса:
(.[^_]*(\?.*)?)
Поместите сам знак вопроса в класс отрицанных символов:
(.[^_?]+)
Это будет соответствовать всем символам, пока не будет подчеркнуто или вопросительный знак.
.[^_]*?\?.*
Все, кроме подчеркивания ноль или более раз, ленивый квантификатор (самое короткое совпадение) с последующим знаком вопроса. Другой вариант:
.[^_\?]*\?.*