Регулярное выражение, которое отклоняет весь вход?

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
11
задан Kasper 15 September 2008 в 12:42
поделиться

11 ответов

Вероятно, это:

[^\w\W]

\w - словесный символ (буква, цифра, и т.д.)
\W - противоположность \w

[^\\w\W] - должен всегда перестать работать, потому что любой символ должен принадлежать одному из классов символов - \w или \W

Другой отрывки:

$.^

$ - утверждают положение в конце строки
^ - утверждают положение в начале строки
. - любой символ

(?#it's just a comment inside of empty regex)

Пустое предвидение/позади должно работать:

(?<!)
10
ответ дан 3 December 2019 в 05:36
поделиться

Лучший стандарт regexs (т.е. никакие предварительные или обратные ссылки), которые отклоняют все исходные данные, (после @aku выше)

.^

и

$.

Это плоские противоречия: "строка с символом перед его началом" и "строкой с символом после его конца".

Примечание: Возможно, что некоторые regex реализации отклонили бы эти шаблоны, как плохо сформировано (довольно легко проверить это ^ прибывает в начале шаблона и $ в конце... с регулярным выражением), но некоторые, которые я проверил, действительно принимают их. Они также не будут работать в реализациях, которые позволяют ^ и $ соответствовать новым строкам.

5
ответ дан 3 December 2019 в 05:36
поделиться
(?=not)possible

? = положительное предвидение. Они не поддерживаются во всех regexp разновидностях, но во многих.

Выражение будет искать "не", затем искать "возможный" запуск в том же положении (так как предвидения не продвигаются в строке).

4
ответ дан 3 December 2019 в 05:36
поделиться

Один пример того, почему такая вещь могла возможно быть необходима, - когда Вы хотите отфильтровать некоторый вход с regexes, и Вы передаете regex как аргумент функции.

В духе функционального программирования, для алгебраической полноты, можно хотеть некоторый тривиальный основной regexes как "все, позволяется" и "ничто не позволяется".

2
ответ дан 3 December 2019 в 05:36
поделиться

Мне это кажется, что Вы принимаетесь за решение проблемы неправильный путь, что точно Вы пытаетесь решить?

Вы могли сделать регулярное выражение, которое ловит все, и инвертируйте результат.

например, в JavaScript:

if (! str.match( /./ ))

но затем Вы могли просто сделать

if (!foo)

вместо этого, как сказал [jan-hani].

Если Вы надеетесь встраивать такой regex в другой regex, Вы могли бы искать $ или ^ вместо этого, или использовать предвидения как [henrik-n] упомянутый.

Но поскольку я сказал, это похоже, "Я думаю, что мне нужен x, но в чем я действительно нуждаюсь, y" проблема.

1
ответ дан 3 December 2019 в 05:36
поделиться

Почему Вы даже хотели бы это? Не был бы простое, если statment добиваются цели? Что-то вроде:

if ( inputString != "" )
  doSomething ()
1
ответ дан 3 December 2019 в 05:36
поделиться

[^\\x00-\xFF]

0
ответ дан 3 December 2019 в 05:36
поделиться

Это зависит от того, что Вы подразумеваете под "регулярным выражением". Вы имеете в виду regexps на конкретном языке программирования или библиотеке? В этом случае ответ, вероятно, да, и можно обратиться к любому из вышеупомянутых ответов.

Если Вы имеете в виду регулярные выражения, как преподается в занятиях по информатике, то ответ нет. Каждое регулярное выражение соответствует некоторой строке. Это могла быть пустая строка, но это всегда соответствует чему-то.

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

0
ответ дан 3 December 2019 в 05:36
поделиться

Править: [^\\n\r\w\s]

-1
ответ дан 3 December 2019 в 05:36
поделиться

[^]+ должен сделать это.

В ответе на комментарий aku, присоединенный к этому, я протестировал его с regex тестером онлайн (http://www.regextester.com/), и тем самым предположите, что он работает с JavaScript. Я должен признаться в не тестировании его в "реальном" коде.;)

0
ответ дан 3 December 2019 в 05:36
поделиться

Ну,

Я не уверен, понял ли я, так как я всегда думал о регулярном выражении пути к строкам совпадения. Я сказал бы, что лучший выстрел, который Вы имеете, не использует regex.

Но, можно также использовать regexp, который соответствует пустым строкам как ^$ или regexp, которые не соответствуют словам/пробелам как [^\w\s] ...

Надежда это помогает!

-1
ответ дан 3 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: