#java #regex #string #whitespace #pipe
#java #регулярное выражение #строка #пробел #канал
Вопрос:
Я пробую некоторые шаблоны регулярных выражений, вот один, который я безуспешно пытался использовать: входная строка (min: 1, max: 100) не должна содержать начальных и завершающих пробелов или символов канала и не должна содержать символа канала внутри строки. В строке могут быть пробелы. Пока это то, что я придумал:
"^([^\s^\|]*)([^\|] )([\Samp;amp;[^\|]]*)$"
Но этот шаблон считает начальные и конечные пробелы пробелами внутри строки.
Приветствуется любая помощь.
Комментарии:
1. Не могли бы вы опубликовать пример строки, которая должна совпадать, и другой, которая не должна совпадать?
2. Причина, по которой он «считает начальные и конечные пробелы пробелами внутри строки», заключается в использовании «*» в вашем первом и последнем терминах. Самым простым соответствием выражению «*» всегда является «» (т. Е. ничего), и поскольку ваш средний термин не исключает пробелов, программа сопоставления включит их. Я все еще попадаюсь на это. 🙁 «*» означает «действительно необязательно», а НЕ «не хочу»…
3. Для шаблона в моем исходном сообщении вот строка, которая соответствует, когда она не должна: » 5″
Ответ №1:
Ответ на ваш вопрос в том виде, в каком он написан:
^[^s|][^|] [^s|]$
Еще одна возможность добавить ограничение на длину:
^([^s]{1,100}|[^s|][^|]{1,98}[^s|])$
Но вы написали свой вопрос так, как хотели? Из вашего последующего заявления вы пытаетесь удалить начальные / конечные пробелы или символы канала? Это было бы по-другому:
s/^s (.*?)s /$1/
s/|//g
Комментарии:
1. Сет, я сначала попробовал твой шаблон, но он возвращает false для одного символа, например «5», «g»…. Шаблон также должен принимать одиночные символы. Чтобы уточнить, я пытаюсь удалить начальные и конечные пробелы и символы канала, а также символы канала внутри строки. Должно быть допустимо наличие пробелов в строке.
2. @Shaun: Ты пробовал мой второй шаблон? Это должно допускать одиночные символы.