2013-07-11 4 views
0

У меня есть строка -Регулярного выражения для JSON

xyz":abc,"lmn 

Я хочу, чтобы извлечь а. для чего это будет регулярное выражение?

Я пытаюсь это -

/xyz\":(.*?),\"lmn/ 

Но это не выборка какого-либо результата.

+0

Когда я тест ' 'хуг ": ABC," lmn'.match (/ хуг \ ":.? (*), \" LMN /)' возвращает '[ "АБВ": азбука, "lmn", "abc"] '. Что вы пытаетесь, что не работает? – Joe

+1

Можете ли вы предоставить, какую ошибку вы получите? Потому что [он работает] (http://regex101.com/r/aT5tE4). Также вы используете PHP или C#? Вы можете предоставить полный код, который вы используете. – HamZa

+0

вам не нужен ведущий и следующий '/' с aC# regex, может быть, ваша проблема –

ответ

1

В C# можно использовать

var regex = new Regex(@"(?<=xyz\"":).*?(?=,\""lmn)"); 
var value = regex.Match(@"xyz"":abc,""lmn").Value; 

Примечание это делает использование C# дословной строка префикса @ это означает, что \ не рассматривается как экранирующий символ. Вам нужно будет использовать двойной ", так что в строку будет включен один ".

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

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

var regex=new Regex(@"xyz\"":(.*?),\""lmn"); 
var value = regex.Match(@"xyz"":abc,""lmn").Groups[1].Value; 

Вы можете проверить наличие матча, выполнив следующие действия

var match = regex.Match(@"xyz"":abc,""lmn"); 
var isMatch = match.Success; 

, а затем следовать с либо match.Value или match.Groups[1].Value в зависимости от регулярных выражений ты использовал.

EDIT Собственно Ускользающий " не требуется в C# регулярное выражение, так что вы можете использовать один из следующих вместо этого.

var regex = new Regex("(?<=xyz\":).*?(?=,\"lmn)"); 
var regex = new Regex("xyz\":(.*?),\"lmn"); 

Эти два не использовать дословный префикс строки, поэтому \" переводится в только " в регулярных выражениях давая регулярное выражение (?<=xyz":).*?(?=,"lmn) или xyz":(.*?),"lmn

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

var regex = new Regex("(?<=^xyz\":).*?(?=,\"lmn$)"); 
var regex = new Regex("^xyz\":(.*?),\"lmn$"); 
Смежные вопросы