2015-06-03 1 views
0

Я пытаюсь получить матч шаблона для строки, как в следующем, чтобы преобразовать каждую строку в элемент списка <li>:Regex начинается с й или х предваряющими или завершающим

-Give on result 
&Second new text 
-The third text 

Another paragraph without list. 

-New list here 

В естественном языке: Матч каждую строки, начинается с - и закончилась с новой строки знак \n

Я попытался следующий шаблон, который работает отлично:

/^([-|-]\w+\s*.*)?\n*$/gum 

Конечно, мы можем написать это просто без квадратных скобок ^(-\w+\s*.*)?\n*$, но для отладки я использовал его, как описано.

В приведенном выше примере, когда я заменяю второй - с & быть ^([-|&]\w+\s*.*)?\n*$ Это отлично работает слишком, и он mtaches на вторую строчку smaple строки. Тем не менее, я не смог сделать его совпадением - с префиксом пробела или суффиксами с пробелом.

Я изменил строку выборки на:

- Give on result 
&Second new text 
-The third text 

Another paragraph without list. 

-New list here 

и я попробовал следующую закономерность:

/^([-|\- |&| -]\w+\s*.*)?\n*$/gum 

Однако она не смогла соответствовать любому суффиксом или префиксом - с белым пространством.

Here are живой демо для оригинального рабочего шаблона:

+1

'[- | -]' не имеет большого смысла. '[]' определяет класс символов. например «любой из символов внутри' [] 'может совпадать с одним символом в одном месте, поэтому вы говорите:« Это черта, тире или труба или тире ». –

+0

Я думаю, что вы хотите' echo preg_replace ('/^- (. *?) $/m ','

  • $ 1
  • ', $ string); '. Или должен ли контент проходить внутри одного и того же' li', если в следующей строке нет '-'? Было бы полезно чтобы получить то, что должен быть выход. – chris85

    +0

    @MarcB Спасибо за ваше замечательное объяснение. – SaidbakR

    ответ

    0
    ^(\h*(?:-|&)\h*\w+\s*.*)\n*$ 
    

    Вы можете попробовать это. | внутри [] не имеет особого значения. См. Демонстрационный ролик.

    https://regex101.com/r/nS2lT4/3

    Строка может начинаться с пробела, то он должен иметь либо - или &, которые могут иметь пробелы впереди. Затем он должен иметь по крайней мере один буквенно-цифровой символ, который может иметь место впереди. Тогда у него может быть что угодно или ничего. В конце концов, он съедает все новые строки, которые он потребляет, или нет, если это не удастся.

    +0

    Большое спасибо, но я думаю, что нужно исправить опечатку в коде ответа, чтобы соответствовать демо, т. е. это '^ (\ s * 'не'^(\ h * ' – SaidbakR

    +1

    @ sємsєм оба будут работать.Использовать один опубликованный; – vks

    +0

    О, Ого! Еще раз спасибо! – SaidbakR

    1

    Полагаю, что вы хотите иметь строку, которая начинается с элемента e (e & или -), причем элемент имеет либо префикс/суффикс пространства (ов).

    ^\s*[&-]\s*(.*)$ 
    

    Если вы не хотите использовать многострочные линии, просто не используйте модификатор m.

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