Ваше второе регулярное выражение «работает», потому что вы добавили пустой альтернативой чередованию, то есть он перешел от (a|b)
к (a|b|)
, который будет соответствовать a
или b
или «ничего» (нулевая ширина, он не должен быть символом пробела или что-то еще, он будет совпадать между символами).
Не работает, но .
соответствует любым символам, кроме строк новой строки, и все ваши строки заканчиваются символом без пробела, поэтому .{0,70}\S
+ «ничего» всегда будет соответствовать.
Ваши требования слишком неясны для меня, чтобы дать вам окончательный ответ (я не уверен, где в это место входят пробелы и -
). Но если вы буквально просто пытаетесь сопоставить все, что появляется в строке, я не вижу причин, по которым вы не можете просто использовать .*\S
(что даст вам аналогичные совпадения с вашим «рабочим» регулярным выражением). Но если .*\S
удовлетворяет ваши потребности, вы, вероятно, должны просто разделить строку символом новой строки и правой обрезкой.
Я думаю, вы забыли задать вопрос. :) –
Я видел этот вопрос не менее 2 раз. Где в мире вы его получаете? – HamZa
Второй, безусловно, не делает то, что вы хотите. Наличие '|' без ничего с одной стороны позволяет чередованию ничего не соответствовать. Его непонятное, по крайней мере для меня, то, что вы пытаетесь сделать, хотя. – OGHaza