2016-06-23 4 views
0

Мне нужно регулярное выражение, соответствующее тексту со специальными символами -,.+\/&. Специальные символы не должны быть более двух последующих, и за специальным символом не может следовать пробел. Более конкретно я должен покрыть эти случаи:Регулярное выражение в тексте со специальными символами в нем

some text/ 
/some text 
some /text 

Я пришел с этим регулярным выражением:

^[-\/,\.+\&]{0,1}[\p{L}]+[-\/,\.+\&]{0,1}([\s\-']?[-\/,\.+\&]{0,1}[\p{L}]+)([-\/,\.+\&]{0,1})$ 

Это соответствует большинству случаев, что мне нужно, но не в состоянии соответствовать, например: some te&xt. Каждая помощь будет оценена по достоинству. Благодарю.

+0

Вы можете проверить [это] (https://regex101.com/) для отладки. Когда вы заявили, что '\' не разрешено, разрешено '\\\\\'? Вы можете просто заменить нежелательные символы для пустых. – Bonatti

+0

Противоположность. \\\\ не разрешено, \ разрешено. – analyser

+0

Попробуйте ['"^(?!. * (?: [- ,. +/&] \\ s | [- ,. +/&] {2})) \\ S + (?: \\ s + \\ S +) * $ "'] (https://regex101.com/r/sV4eZ3/2). –

ответ

1

Вы можете использовать

"^(?!.*(?:[-,.+/&]\\s|[-,.+/&]{2}))[^\\s\\d]+(?:\\s+[^\\s\\d]+)*$" 

См regex demo

Объяснение:

  • ^ - начало строки
  • (?!.*(?:[-,.+/&]\\s|[-,.+/&]{2})) - отрицательная опережения, которая не матч, если есть специальный символ [-,.+/&] следует с пробелами \s, или 2 последовательных специальными символами из [-,.+/&] набора
  • [^\\s\\d]+ - 1 или более другие, чем цифры символов и пробельных
  • (?:\\s+[^\\s\\d]+)* - 0+ последовательности:
    • \\s+ - 1+
    • пробелы
    • [^\\s\\d]+ - кроме цифр и пробелов
  • $ 1 или более символов - конец строки
0

Я нашел решение:

^[-\/,\.+\&\s]{0,1}([\p{L}][-\/,\.+\&\s]{0,1})+([-\/,\.+\&\s]{0,1}([\p{L}][-\/,\.+\&\s]{0,1})+)([\p{L}][-\/,\.+\&\s]{0,1})([-\/,\.+\&\s]{0,1})$ 
Смежные вопросы