Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Regex: чтобы вытащить подстроку между двумя тегами в строке
У меня есть файл в следующем формате:
Data Data Data [Start] Data I want [End] Data
Я хотел бы захватить Data I want из промежутка между тегами [Start] и [End] , используя Regex. Может ли кто-нибудь показать мне, как это можно сделать?
Более полное обсуждение подводных камней использования regex для поиска подходящих тегов можно найти по адресу: http://faq.perl.org/perlfaq4.html#How_do_I_find_matchi . В частности, имейте в виду, что для правильной интерпретации вложенных тегов действительно нужен полноценный парсер.
Обратите внимание, что чувствительность к регистру необходимо будет отключить, чтобы ответить на поставленный вопрос. В perl это модификатор i :
$ echo "Data Data Data [Start] Data i want [End] Data" \
| perl -ne '/\[start\](.*?)\[end\]/i; print "$1\n"'
Data i want
Другой трюк заключается в использовании *? Квантор, который отключает жадность захваченного матча. Например, если у вас есть несоответствующий тег [end] :
Data Data [Start] Data i want [End] Data [end]
вы, вероятно, не хотите, чтобы захватить:
Data i want [End] Data
Хотя вы можете использовать регулярное выражение для анализа данных между открывающими и закрывающими тегами, вам нужно долго и упорно думать, является ли это путь, по которому вы хотите спуститься. Причина этого-потенциал тегов для гнездования: если вложенные теги могут когда-либо произойти или могут когда-либо произойти, то язык, как говорят, больше не является регулярным, и регулярные выражения перестают быть подходящим инструментом для его разбора.
Многие реализации регулярных выражений, такие как PCRE или perl-е регулярные выражения, поддерживают обратное отслеживание, которое может быть использовано для достижения этого грубого эффекта. Но PCRE (в отличие от perl) не поддерживает неограниченное отступление, и это может привести к тому, что вещи будут ломаться странным образом, как только у вас будет слишком много тегов.
Есть очень часто цитируемый пост в блоге, который обсуждает это больше, http://kore-nordmann.de/blog/do_NOT_parse_using_regexp.html (google для него и проверить кэш в настоящее время, они, кажется, имеют некоторые простои)
Ну, если вы гарантируете, что за каждым начальным тегом следует конечный тег, то следующее будет работать.
\[start\](.*?)\[end\]
Однако, если у вас есть сложный текст, такой как следующее:
[start] sometext [start] sometext2 [end] sometext [end]
тогда вы столкнетесь с проблемами с regex.
Теперь следующий пример вытащит все горячие ссылки на странице:
'/<a(.*?)a>/i'
В приведенном выше случае мы можем гарантировать, что не будет никаких вложенных случаев:
'<a></a>'
Итак, это сложный вопрос, и его нельзя решить простым ответом.
С помощью Perl вы можете окружить нужные вам данные с помощью функции () и извлечь их позже, возможно, другие языки имеют аналогичную функцию.
if ($s_output =~ /(data data data data START(data data data)END (data data)/)
{
$dataAllOfIt = $1; # 1 full string
$dataInMiddle = $2; # 2 Middle Data
$dataAtEnd = $3; # 3 End Data
}
Обратитесь к этому вопросу, чтобы вытащить текст между тегами с пробелами и точками ( . )
[\S\s] - это тот, который я использовал
Regex, чтобы соответствовать любому символу, включая новые строки
Прочтите текст с помощью квадратных скобок [] i.e.[Start] и [End] и проверьте массив со списком значений. jsfiddle http://jsfiddle.net/muralinarisetty/r4s4wxj4/1/
var mergeFields = ["[sitename]",
"[daystoholdquote]",
"[expires]",
"[firstname]",
"[lastname]",
"[sitephonenumber]",
"[hoh_firstname]",
"[hoh_lastname]"];
var str = "fee [sitename] [firstname] \
sdfasd [lastname] ";
var res = validateMeargeFileds(str);
console.log(res);
function validateMeargeFileds(input) {
var re = /\[\w+]/ig;
var isValid;
var myArray = input.match(re);
try{
if (myArray.length > 0) {
myArray.forEach(function (field) {
isValid = isMergeField(field);
if (!isValid){
throw e;
}
});
}
}
catch(e) {
}
return isValid;
}
function isMergeField(mergefield) {
return mergeFields.indexOf(mergefield.toLowerCase()) > -1;
}