2013-12-01 3 views
-2

Я использую .{0,70}(?:\\S(?:-| |$)|$) для соответствия строкам, например a/n b/n c/n, но только последняя строка соответствует i.e c.Получение шаблона для соответствия последовательно

Например:

hello(newline)world(NL)java(NL) 

соответствует только java, но когда я изменить регулярное выражение .{0,70}(?:\\S(?:|-| |$)|$) он прекрасно работает fine.Can любой объяснить это

+4

Я думаю, вы забыли задать вопрос. :) –

+0

Я видел этот вопрос не менее 2 раз. Где в мире вы его получаете? – HamZa

+0

Второй, безусловно, не делает то, что вы хотите. Наличие '|' без ничего с одной стороны позволяет чередованию ничего не соответствовать. Его непонятное, по крайней мере для меня, то, что вы пытаетесь сделать, хотя. – OGHaza

ответ

2

Ваше второе регулярное выражение «работает», потому что вы добавили пустой альтернативой чередованию, то есть он перешел от (a|b) к (a|b|), который будет соответствовать a или b или «ничего» (нулевая ширина, он не должен быть символом пробела или что-то еще, он будет совпадать между символами).

Не работает, но . соответствует любым символам, кроме строк новой строки, и все ваши строки заканчиваются символом без пробела, поэтому .{0,70}\S + «ничего» всегда будет соответствовать.

Ваши требования слишком неясны для меня, чтобы дать вам окончательный ответ (я не уверен, где в это место входят пробелы и -). Но если вы буквально просто пытаетесь сопоставить все, что появляется в строке, я не вижу причин, по которым вы не можете просто использовать .*\S (что даст вам аналогичные совпадения с вашим «рабочим» регулярным выражением). Но если .*\S удовлетворяет ваши потребности, вы, вероятно, должны просто разделить строку символом новой строки и правой обрезкой.

+0

Может ли это быть наш путаный OP, который ищет модификатор Single Line, независимо от того, что он еще назвал языком программирования? (OP: «regex» - это * не * язык программирования как таковой). – usr2564301

Смежные вопросы