Шаблон регулярного выражения для захвата значения в ключевом параметре внутри двойных кавычек - PullRequest
0 голосов
/ 12 декабря 2018

Я хочу захватить BBKH2-0272-2, BBH@5, 1234 в строке ниже (значение захвата, где ключ ssidname или SSIDName ).

{"SSIDIndex":2,"SSIDName":"BBKH2-0272-2" ,"Band":"2.4GHz","Status":"RadioIndex":1,"SSIDIndex":3,"SSIDName":"BBH@5","ssidname":"1234", "ssid_name":"MKLM-098", ssidname=ppoin }

Я использую это регулярное выражение:

(? <= (? I) ("SSIDName": ")) (\ w {1,8}) </p>

но это не работает. Заранее спасибо.

Ответы [ 5 ]

0 голосов
/ 12 декабря 2018

Я не знаю, почему вы использовали такое сложное регулярное выражение

, это можно сделать с помощью

регулярного выражения: /^"SSIDName":"(.*?)"/gmi

g - проверяет глобально, т.е.не возвращайся после первого матча.

m - соответствует от начала до конца строки, т.е.многострочный.

i - совпадение без учета регистра.

Проверьте Демо здесь .

0 голосов
/ 12 декабря 2018

Вы также можете попробовать следующее регулярное выражение (очень близкое к вашему):

(?i)(?<="SSIDName":")[^"]+(?=")

со строкой:

{"SSIDIndex":2,"SSIDName":"BBKH2-0272-2" ,"Band":"2.4GHz","Status":"RadioIndex":1,"SSIDIndex":3,"SSIDName":"BBH@5","ssidname":"1234" }

Будет выбрано только:

BBKH2-0272-2
BBH@5
1234

Как показано в https://regex101.com/r/3Teuiq/1/

0 голосов
/ 12 декабря 2018

Используйте следующий не жадный подход:

(?i)(?:"ssidname":")(.*?)"

Все, что я делаю, - это поиск строки "ssidname":" и захват значения (без кавычек) до конца кавычкивстречается.

Демо

0 голосов
/ 12 декабря 2018

Попробуйте тоже.

 (?<=(?i)("SSIDName":"))([a-zA-z0-9-@]+)
0 голосов
/ 12 декабря 2018

Вам не нужно оглядываться назад, и вы можете использовать это регулярное выражение и захватывать группу 1,

(?i)"SSIDName":"([^"]+)"

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

Live Demo

Ваше регулярное выражение, (?<=(?i)("SSIDName":"))(\w{1,8}) в порядке, но будет препятствовать при захвате BBH@5, как выпытаются захватить его с помощью \w, а @ не является частью \w.Если вы измените свое регулярное выражение на это,

(?<=(?i)(?:"SSIDName":"))([\w@-]+)

Тогда даже ваше регулярное выражение сможет захватить то, что вам нужно.

Демонстрация для вашего измененного регулярного выражения

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...