Respostas:
Colchetes são voltados para classe de personagem, e você está realmente tentando corresponder a qualquer um dos seguintes: s, |, s(de novo), e, a, s(de novo),o e n.
Use parênteses em vez de agrupar:
(s|season)
ou grupo de não captura:
(?:s|season)
Nota: Grupos de não captura informam ao mecanismo que ele não precisa armazenar a correspondência, enquanto o outro (grupo de captura precisa). Para coisas pequenas, ou funciona, para coisas 'pesadas', você pode querer ver primeiro se precisa ou não do fósforo. Caso contrário, é melhor usar o grupo de não captura para alocar mais memória para cálculos em vez de armazenar algo que você nunca precisará usar.
?:interior de um agrupamento aka non-capturingapenas diz que você não pode usar as expressões combinadas com $1, $2e assim por diante ... Se você quiser que uma expressão não seja correspondida, o que você precisa é ^.
(?! ... )insead, ou seja (?!s|season), neste caso.

Captura de tela acima tirada deste exemplo ao vivo: https://regex101.com/r/cU5lC2/1
Eu vou estar usando o shell interativo phpsh no Ubuntu 12.10 para demonstrar a motor PCRE regex através do método conhecido como preg_match
Inicie o phpsh, coloque algum conteúdo em uma variável, combine com a palavra.
el@apollo:~/foo$ phpsh
php> $content1 = 'badger'
php> $content2 = '1234'
php> $content3 = '$%^&'
php> echo preg_match('(\w+)', $content1);
1
php> echo preg_match('(\w+)', $content2);
1
php> echo preg_match('(\w+)', $content3);
0
O método preg_match utilizado o motor PCRE dentro da linguagem PHP para analisar variáveis: $content1, $content2e $content3com o(\w)+ padrão.
$ content1 e $ content2 contêm pelo menos uma palavra, $ content3 não.
el@apollo:~/foo$ phpsh
php> $gun1 = 'dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'darty gun';
php> $gun4 = 'unicorn gun';
php> echo preg_match('(dart|fart)', $gun1);
1
php> echo preg_match('(dart|fart)', $gun2);
1
php> echo preg_match('(dart|fart)', $gun3);
1
php> echo preg_match('(dart|fart)', $gun4);
0
Variáveis gun1e gun2contêm a string dartou o fartque está correto, mas gun3 contém dartye ainda corresponde, esse é o problema. Então, para o próximo exemplo.
Os limites de palavras podem ser forçados a corresponder \b, consulte:

Imagem visual Regex adquirida de http://jex.im/regulex e https://github.com/JexCheng/regulex Exemplo:
el@apollo:~/foo$ phpsh
php> $gun1 = 'dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'darty gun';
php> $gun4 = 'unicorn gun';
php> echo preg_match('(\bdart\b|\bfart\b)', $gun1);
1
php> echo preg_match('(\bdart\b|\bfart\b)', $gun2);
1
php> echo preg_match('(\bdart\b|\bfart\b)', $gun3);
0
php> echo preg_match('(\bdart\b|\bfart\b)', $gun4);
0
O \bafirma que temos um limite de palavra, garantindo que "dardo" corresponda, mas "dardo" não.
Eu testo exemplos em js. Solução mais simples - basta adicionar a palavra que você precisa dentro de / /:
var reg = /cat/;
reg.test('some cat here');//1 test
true // result
reg.test('acatb');//2 test
true // result
Agora, se vc precisar desta palavra específica com limites, não dentro de quaisquer outras letras-signos. Usamos o marcador b :
var reg = /\bcat\b/
reg.test('acatb');//1 test
false // result
reg.test('have cat here');//2 test
true // result
Temos também o método exec () em js, que retorna o resultado do objeto. Ajuda o fg a obter informações sobre o local / índice da nossa palavra.
var matchResult = /\bcat\b/.exec("good cat good");
console.log(matchResult.index); // 5
Se precisarmos obter todas as palavras correspondentes em string / frase / texto, podemos usar o modificador g (correspondência global):
"cat good cat good cat".match(/\bcat\b/g).length
// 3
Agora o último - não preciso de uma palavra específica, mas de algumas delas. Nós usamos | sinal, significa escolha / ou.
"bad dog bad".match(/\bcat|dog\b/g).length
// 1
[ ]define uma classe de personagem. Portanto, todos os caracteres que você definir lá serão correspondentes. [012]corresponderá a 0ou 1ou 2e[0-2] se comportará da mesma forma.
O que você quer é agrupamentos para definir uma instrução ou. Usar(s|season) para o seu problema.
Btw. você tem que tomar cuidado. Metacaracteres em regex normal (ou dentro de um agrupamento) são diferentes da classe de caracteres. Uma classe de personagem é como um sub-idioma. [$A]vai apenas corresponder $ou A, nada mais. Não há como escapar aqui pelo dólar.
(season|s)lugar.[season]corresponde a qualquer ums,e,a,o,n.