(? i) регулярное выражение - где в выражении? [Дубликат]

В приведенном ниже примере показано, как читать текст в вопросе, представленный как переменная jsonText. Это решение использует API Java EE7 javax.json (о чем упоминается в некоторых других ответах). Причина, по которой я добавил его в качестве отдельного ответа, состоит в том, что следующий код показывает, как фактически получает доступ к некоторым значениям, указанным в вопросе. Для выполнения этого кода потребуется реализация javax.json API . Полный пакет для каждого из необходимых классов был включен, так как я не хотел объявлять «импортные» операторы.

javax.json.JsonReader jr = 
    javax.json.Json.createReader(new StringReader(jsonText));
javax.json.JsonObject jo = jr.readObject();

//Read the page info.
javax.json.JsonObject pageInfo = jo.getJsonObject("pageInfo");
System.out.println(pageInfo.getString("pageName"));

//Read the posts.
javax.json.JsonArray posts = jo.getJsonArray("posts");
//Read the first post.
javax.json.JsonObject post = posts.getJsonObject(0);
//Read the post_id field.
String postId = post.getString("post_id");

Теперь, прежде чем кто-либо пойдет и опустит этот ответ, потому что он не использует GSON , org.json, Jackson или любой из других сторонних фреймворков, это пример «требуемого кода» на вопрос для анализа предоставленного текста. Мне хорошо известно, что соблюдение существующего стандарта JSR 353 не рассматривалось для JDK 9 , и поэтому JSR 353 spec следует рассматривать так же, как и любая другая сторонняя сторона JSON.

40
задан Luccas 5 July 2014 в 15:19
поделиться

3 ответа

(?i) запускает нечувствительный к регистру режим

(?-i) отключает нечувствительный к регистру режим

Дополнительная информация на «Режимы включения и выключения для только части раздела «Регулярное выражение» этой страницы :

Современные ароматы регулярных выражений позволяют применять модификаторы только к части регулярного выражения. Если вы вставляете модификатор (? Ism) в середину регулярного выражения, модификатор применяется только к части регулярного выражения справа от модификатора. Вы можете отключить режимы, указав знак минуса. Все режимы после знака минус будут отключены. Например. (? i-sm) отключает нечувствительность к регистру и отключает как однострочный, так и многострочный режим.

Не все ароматы регулярных выражений поддерживают это. JavaScript и Python применяют все модификаторы режимов ко всему регулярному выражению. Они не поддерживают синтаксис (? -Ismx), так как отключение опции бессмысленно, если модификаторы режима применяются ко всем регулярным выражениям. Все параметры отключены по умолчанию.

Вы можете быстро проверить, как вы используете регкийный аромат, используя модификаторы режима ручек. Регулярное выражение (? I) te (? - i) st должно соответствовать тесту и TEst, но не teST или TEST.

56
ответ дан gpojd 27 August 2018 в 21:10
поделиться

Взято непосредственно из рубиновых документов.

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

/ pat / i - Игнорировать регистр

/ pat / m - Рассматривать новую строку как символ, сопоставляемый.

/ pat / x - игнорировать пробелы и комментарии в шаблоне

/ pat / o -> выполнить # {} интерполяцию только один раз

i, m, и x также может применяться на уровне подвыражения с конструкцией (? on-off), которая включает опции и отключает опции для выражения, заключенного в круглые скобки.

2
ответ дан gmaliar 27 August 2018 в 21:10
поделиться

(?i) включает режим, нечувствительный к регистру , (?-i) отключает его.

Например, если вы попытались (?i)te(?-i)st, это соответствовало бы тесту, TEst , tEst, но не teST.

17
ответ дан Mathletics 27 August 2018 в 21:10
поделиться
Другие вопросы по тегам:

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