Иногда с помощью персонажей, которые вы указали, возможно простое экранирование. Например, использование обратной косой черты для выхода из скобки не будет работать в левой части строки подстановки в sed, а именно
sed -e 's/foo\(bar/something_else/'
. Я просто использую простое определение класса символов вместо , поэтому вышеприведенное выражение становится
sed -e 's/foo[(]bar/something_else/'
, которое я нахожу для большинства реализаций регекса.
BTW Классы символов являются довольно ванильными элементами регулярного выражения, поэтому они, как правило, работают в большинстве ситуаций, когда вы нужны экранированные символы в регулярных выражениях.
Изменить: после комментария ниже, просто подумал, что я бы упомянул о том, что вам также нужно учитывать разницу между автоматами конечного состояния и автоматами не конечного состояния при просмотре поведение оценки regexp.
Возможно, вам захочется взглянуть на «блестящую книгу с шаром», а также на эффективную Perl ( санированную ссылку Amazon ), в частности главу о регулярных выражениях, чтобы получить почувствуйте тогда разницу в типах оценки двигателя regexp.
Не все в мире PCRE!
В любом случае, регулярные выражения настолько неуклюжи по сравнению с SNOBOL ! Теперь это был интересный курс программирования! Наряду с тем, что на Simula .
Ах, радости изучения в UNSW в конце 70-х! (-:
В соответствии с запросом приведен пример моего комментария:
Один из способов сделать это - сохранить переменную для гильдии в некоторой базе данных, которая имеет значение либо true, либо false. Затем вы бы взяли эту переменную и проверили, включена ли или выключена эта опция в гильдии.
blockquote>& nbsp;
client.on("guildMemberAdd", (member) => { const guild = member.guild; let memberTag = member.user.tag; // Code here to get the guild from database, this is just a non-working example let dbGuild = database.get('Guild', guild.id); // Check if the guild has the welcome command disabled if (dbGuild.enableWelcomeCmd === false) { // Breaks the function, no further message will be send return; } guild.channels.sort(function(chan1,chan2){ if(chan1.type!==`text`) return 1; if(!chan1.permissionsFor(guild.me).has(`SEND_MESSAGES`)) return -1; return chan1.position < chan2.position ? -1 : 1; }).first().send(memberTag + " just joined <:floshed:533687801741443082>"); }); client.on("message", async message => { // Check if the msg has been send by a bot if(message.author.bot) return; // Check if message has correct prefix if(message.content.indexOf(config.prefix) !== 0) return; const args = message.content.slice(config.prefix.length).trim().split(/ +/g); const command = args.shift().toLowerCase(); // Code for actually changing the guild variable if (command === 'toggleWelcome') { // Code here to get the guild from database, this is just a non-working example let dbGuild = database.get('Guild', message.guild.id); dbGuild.enableWelcomeCmd = !dbGuild.enableWelcomeCmd; // Save the new variable for the guild (also a non-working example) database.save('Guild', message.guild.id, dbGuild); } });
. Вам нужно будет изучить базы данных и тому подобное. сами по себе, существует большое количество (бесплатных) опций, которые имеют разный синтаксис. Эта часть - кое-что для вас, чтобы понять, но я надеюсь, что это может дать вам общее представление.