Эта ссылка демонстрирует подход, который, кажется, работает -> [^] +, что означает «не соответствует ни одному символу», двойной минус, который можно перечитать как «соответствовать любому символу». Источник - loune.net/2011/02/…
ХоккейJ
Ответы:
645
Да, ты можешь. Это должно работать.
. = любой символ
\. = фактический символ точки
.?= .{0,1}= соответствовать любому символу ноль или один раз
.*= .{0,}= соответствовать любому символу ноль или более раз
.+= .{1,}= соответствовать любому символу один или несколько раз
Не всегда точка означает любой символ. Исключение при однострочном режиме. \ p {все} должно быть
марсианин
Как вы можете включить обратную косую черту в этот список символов?
Результаты поиска веб-результаты Pi
1
@pippilongstocking Обратная косая черта `\\`
Poutrathor
58
Да, это будет работать, хотя обратите внимание, что .они не будут соответствовать символам новой строки, если вы не передадите флаг DOTALL при компиляции выражения:
Это очень полезная информация! Я предполагал, .что будет соответствовать символам новой строки. Я рад, что прочитал ваш ответ, мне нужно это использовать!
Бен Кейн
Иногда вам также может потребоваться сопоставить символы новой строки в регулярных выражениях Java в тех контекстах, где вы не можете передать Pattern.DOTALL, например при выполнении многострочного поиска регулярных выражений в Eclipse, или как пользователь любого приложения Java, которое предлагает поиск регулярных выражений. Основываясь на руководстве регулярного выражения.info , вам может потребоваться использовать {.,\n,\r,\u2028,\u2029,\u0085}для сопоставления абсолютно любой символ (символы Юникода являются дополнительными символами в конце строки, добавляемыми без совпадения .в Java), но они {.,\n,\r}будут работать для большинства текстовых файлов.
Теодор Мердок
8
@TheodoreMurdock [\s\S]- это популярный способ сопоставления любого символа, если вы не можете использовать DOTALL.
mpen
В случае, если это придет вам в голову, НЕ используйте (?:.|\\v)*из-за JDK-6337993 .
Оливье Кайо,
22
Используйте шаблон, .чтобы соответствовать любому символу один раз, .*чтобы соответствовать любому символу ноль или более раз, .+чтобы соответствовать любому символу один или несколько раз.
Существует множество сложных инструментов тестирования и разработки регулярных выражений, но если вы просто хотите использовать простой тестовый набор в Java, вот вам один из них:
String[] tests ={"AAA123","ABCDEFGH123","XXXX123","XYZ123ABC","123123","X123","123",};for(String test : tests){System.out.println(test +" "+test.matches(".+123"));}
Теперь вы можете легко добавлять новые тестовые случаи и пробовать новые шаблоны. Веселитесь, изучая регулярные выражения.
Upvote здесь. ОП не указал, но кажется правильным добавить, что шаблон будет соответствовать любому символу, включая такие вещи, как ### 123, 123123,% $ # 123, которые ОП может не захотеть. Класс символов @Huusom, используемый выше, будет использовать все OP для использования только прописных буквенных символов, которые могли быть намерением.
techdude
9
Самый распространенный способ кодирования этого кода - класс символов, члены которого образуют разделение множества возможных символов.
Обычно люди пишут это как [\s\S](пробел или не пробел), хотя [\w\W], [\d\D]и т. Д. Все будет работать.
Для справки, из регулярных выражений.info/dot.html : «JavaScript и VBScript не имеют возможности сделать символы разрыва строки при совпадении точек. В этих языках вы можете использовать класс символов, такой как [\ s \ S] для соответствия любому символу. Этот символ соответствует символу, который является либо символом пробела (включая символы разрыва строки), либо символом, который не является символом пробела. Поскольку все символы являются либо пробелом, либо непробельным символом, этот класс символов соответствует любому символу «.
Дин Или
7
.*и .+для любых символов, кроме новых строк.
Двойной побег
На всякий случай, вы хотели бы включить новые строки, следующие выражения могут также работать для тех языков, для которых требуется двойное экранирование, таких как Java или C ++:
[\\s\\S]*[\\d\\D]*[\\w\\W]*
для нуля или более раз, или
[\\s\\S]+[\\d\\D]+[\\w\\W]+
за один или несколько раз.
Одиночный побег:
Двойное экранирование не требуется для некоторых языков, таких как, C #, PHP, Ruby, PERL, Python, JavaScript:
[\s\S]*[\d\D]*[\w\W]*[\s\S]+[\d\D]+[\w\W]+
Тест
import java.util.regex.Matcher;import java.util.regex.Pattern;publicclassRegularExpression{publicstaticvoid main(String[] args){finalString regex_1 ="[\\s\\S]*";finalString regex_2 ="[\\d\\D]*";finalString regex_3 ="[\\w\\W]*";finalString string ="AAA123\n\t"+"ABCDEFGH123\n\t"+"XXXX123\n\t";finalPattern pattern_1 =Pattern.compile(regex_1);finalPattern pattern_2 =Pattern.compile(regex_2);finalPattern pattern_3 =Pattern.compile(regex_3);finalMatcher matcher_1 = pattern_1.matcher(string);finalMatcher matcher_2 = pattern_2.matcher(string);finalMatcher matcher_3 = pattern_3.matcher(string);if(matcher_1.find()){System.out.println("Full Match for Expression 1: "+ matcher_1.group(0));}if(matcher_2.find()){System.out.println("Full Match for Expression 2: "+ matcher_2.group(0));}if(matcher_3.find()){System.out.println("Full Match for Expression 3: "+ matcher_3.group(0));}}}
Если вы хотите изучить выражение, это было объяснено на верхней правой панели regex101.com . Если вы хотите, вы также можете посмотреть в этой ссылке , как она будет сопоставляться с некоторыми примерами входных данных.
[^]должен соответствовать любому символу, включая перевод строки. [^CHARS] соответствует всем символам, кроме символов CHARS . Если CHARS пуст, он соответствует всем символам.
Я работаю над этим Не всегда точка означает любой символ. Исключение при однострочном режиме. \p{all}должно быть
String value ="|°¬<>!\"#$%&/()=?'\\¡¿/*-+_@[]^^{}";String expression ="[a-zA-Z0-9\\p{all}]{0,50}";if(value.matches(expression)){System.out.println("true");}else{System.out.println("false");}
Ответы:
Да, ты можешь. Это должно работать.
.
= любой символ\.
= фактический символ точки.?
=.{0,1}
= соответствовать любому символу ноль или один раз.*
=.{0,}
= соответствовать любому символу ноль или более раз.+
=.{1,}
= соответствовать любому символу один или несколько разисточник
Да, это будет работать, хотя обратите внимание, что
.
они не будут соответствовать символам новой строки, если вы не передадите флаг DOTALL при компиляции выражения:источник
.
что будет соответствовать символам новой строки. Я рад, что прочитал ваш ответ, мне нужно это использовать!{.,\n,\r,\u2028,\u2029,\u0085}
для сопоставления абсолютно любой символ (символы Юникода являются дополнительными символами в конце строки, добавляемыми без совпадения.
в Java), но они{.,\n,\r}
будут работать для большинства текстовых файлов.[\s\S]
- это популярный способ сопоставления любого символа, если вы не можете использовать DOTALL.(?:.|\\v)*
из-за JDK-6337993 .Используйте шаблон,
.
чтобы соответствовать любому символу один раз,.*
чтобы соответствовать любому символу ноль или более раз,.+
чтобы соответствовать любому символу один или несколько раз.источник
Существует множество сложных инструментов тестирования и разработки регулярных выражений, но если вы просто хотите использовать простой тестовый набор в Java, вот вам один из них:
Теперь вы можете легко добавлять новые тестовые случаи и пробовать новые шаблоны. Веселитесь, изучая регулярные выражения.
Смотрите также
источник
Нет,
*
будет соответствовать нулю или более символов. Вы должны использовать+
, который соответствует одному или более.Это выражение может работать лучше для вас:
[A-Z]+123
источник
Самый распространенный способ кодирования этого кода - класс символов, члены которого образуют разделение множества возможных символов.
Обычно люди пишут это как
[\s\S]
(пробел или не пробел), хотя[\w\W]
,[\d\D]
и т. Д. Все будет работать.источник
Двойной побег
На всякий случай, вы хотели бы включить новые строки, следующие выражения могут также работать для тех языков, для которых требуется двойное экранирование, таких как Java или C ++:
для нуля или более раз, или
за один или несколько раз.
Одиночный побег:
Двойное экранирование не требуется для некоторых языков, таких как, C #, PHP, Ruby, PERL, Python, JavaScript:
Тест
Вывод
Если вы хотите изучить выражение, это было объяснено на верхней правой панели regex101.com . Если вы хотите, вы также можете посмотреть в этой ссылке , как она будет сопоставляться с некоторыми примерами входных данных.
RegEx Circuit
jex.im визуализирует регулярные выражения:
источник
(\W|\w)*
вместо двойного побегаКонкретное решение проблемы примера: -
Пытаться
[A-Z]*123$
будет соответствовать123
,AAA123
,ASDFRRF123
. В случае, если вам нужен хотя бы персонаж перед123
использованием[A-Z]+123$
.Общее решение вопроса (Как сопоставить «любой символ» в регулярном выражении):
[\w|\W]{min_char_to_match,}
.[\S]{min_char_to_match,}
.источник
[^]
должен соответствовать любому символу, включая перевод строки.[^
CHARS]
соответствует всем символам, кроме символов CHARS . Если CHARS пуст, он соответствует всем символам.Пример JavaScript:
источник
Попробуйте регулярное выражение
.{3,}
. Это будет соответствовать всем символам, кроме новой строки.источник
Я работаю над этим Не всегда точка означает любой символ. Исключение при однострочном режиме.
\p{all}
должно бытьисточник