@AndersonGreen, a pergunta foi bloqueada prematuramente. As respostas são muito escassas, pois essas soluções não são viáveis, pois a maioria dos regex não reconhece a pesquisa e o quantificador de modo . Eu acredito que o quantificador existia no momento da pergunta.
Alguém sabe por que isso seria interrompido (pelo menos em JavaScript) quando tento procurar por strings começando com '#'? ^(?=.*\b#friday\b)(?=.*\b#tgif\b).*$falha em combinar, blah #tgif blah #friday blahmas ^(?=.*\bfriday\b)(?=.*\btgif\b).*$funciona bem.
A resposta aceita funcionou. isso também funcionou perfeitamente para mim. Para pesquisar código no visual studio 'encontre resultados'.
Iogurte O Sábio
1
Este funciona para mim e é muito mais conciso e fácil de entender do que a resposta aceita!
precisa saber é o seguinte
1
Eu precisava de uma solução que tivesse apenas dois nomes para corresponder, portanto, essa resposta é mais concisa para esse caso. Mas a resposta aceita se torna mais concisa além de 2, pois o número de "ou" s aumenta fatorialmente. Por 3 nomes haveria 6 "ou" s, 4 nomes seria 24 "ou" s, etc.
WileCau
Eu recomendaria para torná-lo preguiçoso james.*?jack|jack.*?james. Isso ajudará em textos grandes.
Jekis 3/06/19
42
Explicação do comando que eu vou escrever : -
. significa qualquer caractere, o dígito pode ser substituído por.
* significa zero ou mais ocorrências de algo escrito antes dele.
|significa 'ou' .
Assim,
james.*jack
procuraria james , qualquer número de caracteres até jackchegar.
Como observação lateral - você também pode ter editado a resposta do @ icyrock (que é a mesma que a sua, apenas 6 anos antes), sua explicação é muito útil por si só.
WoJ 23/01
2
Obrigado por esta resposta, no entanto, sinto a necessidade de ressaltar que, na pesquisa VSCode, sua resposta . * James | james. * jack ocupará os espaços entre o '|' (ou) símbolo em consideração durante a pesquisa. jack * james | james * jack.. obras e olhar does not para os espaços
jgritten
2
IF $ _explanation === "impressionante" ENTÃO retorne $ THUMBS_UP ENDIF;
O Vim possui um operador de ramificação \&que é útil ao procurar uma linha contendo um conjunto de palavras, em qualquer ordem. Além disso, estender o conjunto de palavras necessárias é trivial.
Por exemplo,
/.*jack\&.*james
corresponderá a uma linha contendo jacke james, em qualquer ordem.
Veja esta resposta para mais informações sobre o uso. Não conheço nenhum outro sabor de regex que implemente ramificação; o operador nem está documentado na entrada da Wikipedia Expression regular .
Se você deseja simplificar / modificar / explorar a expressão, isso foi explicado no painel superior direito de regex101.com . Se desejar, também é possível assistir neste link , como ele corresponderia a algumas entradas de amostra.
const regex =/^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b|.*\bjack\b).*$/gm;const str =`hi jack here is james
hi james here is jack
hi james jack here is jack james
hi jack james here is james jack
hi jack jack here is jack james
hi james james here is james jack
hi jack jack jack here is james
`;let m;while((m = regex.exec(str))!==null){// This is necessary to avoid infinite loops with zero-width matchesif(m.index === regex.lastIndex){
regex.lastIndex++;}// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex)=>{
console.log(`Found match, group ${groupIndex}: ${match}`);});}
Respostas:
Você pode fazer verificações usando lookarounds :
Teste-o.
Essa abordagem tem a vantagem de poder especificar facilmente várias condições.
fonte
vim
sintaxe:^\(.*\<jack\>\)\@=\(.*\<james\>\@=\).*$
ou\v^(.*<jack>)@=(.*<james>)@=.*$
^(?=.*\b#friday\b)(?=.*\b#tgif\b).*$
falha em combinar,blah #tgif blah #friday blah
mas^(?=.*\bfriday\b)(?=.*\btgif\b).*$
funciona bem.\b
significa aqui?Experimentar:
Se você deseja os dois ao mesmo tempo, então
or
eles:fonte
james.*?jack|jack.*?james
. Isso ajudará em textos grandes.Explicação do comando que eu vou escrever : -
.
significa qualquer caractere, o dígito pode ser substituído por.*
significa zero ou mais ocorrências de algo escrito antes dele.|
significa 'ou' .Assim,
procuraria
james
, qualquer número de caracteres atéjack
chegar.Desde que você quer um
jack.*james
oujames.*jack
Daí o comando :
fonte
Sua curta e doce
fonte
Você pode fazer:
fonte
O Vim possui um operador de ramificação
\&
que é útil ao procurar uma linha contendo um conjunto de palavras, em qualquer ordem. Além disso, estender o conjunto de palavras necessárias é trivial.Por exemplo,
/.*jack\&.*james
corresponderá a uma linha contendo
jack
ejames
, em qualquer ordem.Veja esta resposta para mais informações sobre o uso. Não conheço nenhum outro sabor de regex que implemente ramificação; o operador nem está documentado na entrada da Wikipedia Expression regular .
fonte
MÉTODO 1: Um
jack
e Umjames
Caso não sejam permitidos dois
jack
ou doisjames
, apenas umjack
e umjames
serão válidos, é provável que possamos criar uma expressão semelhante a:Aqui, excluiríamos essas instâncias de pares usando estas instruções:
e,
RegEx Demo 1
Também podemos simplificar isso para,
RegEx Demo 2
Se você deseja simplificar / modificar / explorar a expressão, isso foi explicado no painel superior direito de regex101.com . Se desejar, também é possível assistir neste link , como ele corresponderia a algumas entradas de amostra.
Circuito RegEx
O jex.im visualiza expressões regulares:
Teste
MÉTODO 2: Um
jack
e umjames
em ordem específicaTambém pode ser projetado para o primeiro
james
últimojack
, semelhante ao seguinte:RegEx Demo 3
e vice versa:
RegEx Demo 4
fonte
Você pode usar o recurso de quantificador do regex, pois
lookaround
pode não ser suportado o tempo todo.fonte