none
Expressão Regular RRS feed

  • Pergunta

  • Olá, Pessoal!

    Pretendo ter a expressão regular para adicionar no meu código. Este código deverá ler o arquivos textos parecidos com este:

    <Databases>
      <Database SiteCount="44" Name="SharePoint_Content" DataSource="sxp0996">
        <Site Id="33cb5b0b-4aac-4555-b7ca-08b07c52c180" OwnerLogin="SP\xabomes" InSiteMap="True">
          <Webs Count="1">
            <Web Id="d365bc63-a7f6-4f7c-92d5-69608dd30256" Url="/sites/w-pm" LanguageId="1046" TemplateName="STS#1" TemplateId="1" />
          </Webs>
        </Site>
        <Site Id="1fe4fe6a-cb4d-4003-b29b-262cd7eac801" OwnerLogin="SP\xabomes" InSiteMap="True">
          <Webs Count="1">
            <Web Id="70ea0212-d96d-4765-87ef-1dd0263660a1" Url="/pagina/dos_cmd" LanguageId="1046" TemplateName="STS#0" TemplateId="1" />
          </Webs>
        </Site>
        <Site Id="555485b7-5471-422b-9c1e-26bcd2e5c976" OwnerLogin="SP\xabomes" InSiteMap="True">
          <Webs Count="1">
            <Web Id="92efa137-6d7e-4e39-b0f5-fa1ad12308b6" Url="/sites/gest_muda" LanguageId="1046" TemplateName="STS#0" TemplateId="1" />
          </Webs>
        </Site>

    Quero obter em uma lista das Url entre "aspas".

    Pelo exemplo acima, o retorno deve ser:

    /sites/w-pm
    /pagina/dos_cmd
    /sites/gest_muda
    Como desenvolver essa expressão regular?

    Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew !




    • Editado aNetao terça-feira, 19 de fevereiro de 2013 18:08
    terça-feira, 19 de fevereiro de 2013 14:54

Todas as Respostas

  • Deixa eu ver se eu entendi, você quer uma expressão regular para aceitar coisas do tipo:

    /sites/...........

    Se for isso, ela ficará assim: ^\/sites\/\S+$

    Ela irá aceitar strings que comecem com "/sites/" seguidas de qualquer carácter que não seja "espaço"


    Ao infinito e além!

    terça-feira, 19 de fevereiro de 2013 17:29
  • Deixa eu ver se eu entendi, você quer uma expressão regular para aceitar coisas do tipo:

    /sites/...........

    Se for isso, ela ficará assim: ^\/sites\/\S+$

    Ela irá aceitar strings que comecem com "/sites/" seguidas de qualquer carácter que não seja "espaço"


    Ao infinito e além!

    Bom, eu editei o exemplo para ficar mais facil.

    Depois da Url=, deve retornar apenas o que está entre o 1º par de aspas


    Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew !

    terça-feira, 19 de fevereiro de 2013 18:06
  • Dessa forma ^\/\S+\/\S+$ serão aceitas qualquer string que comece com "/" seguida de algum texto + "/" seguida de outro texto. Exemplo:

    /sites/asdf

    /as/asdfasd

    /asdfasdf/asdfasd

    Resolve seu problema, ou precisa ser mais específica?


    Ao infinito e além!

    terça-feira, 19 de fevereiro de 2013 18:16
  • Desse modo pode ter barra em qualquer local, como no exemplo.

    A regra tem que ser, ao encontrar a tag Url= ... retornar o que está entre o 1º par de aspas ("").

     


    Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew !

    terça-feira, 19 de fevereiro de 2013 19:14
  • url="([^"]*)"

    Lembrando que o paranteses delimita um grupo. Então para pegar só a url sem as aspas e o url= pegue o valor do grupo. Uma curiosidade: tem que ser mesmo uma regex? Não seria mais fácil pegar os atributos usando um parser xml?

    terça-feira, 19 de fevereiro de 2013 19:26
  • Luciano, 

    não tá faltando/sobrando algum aspas?

    Não verdade, estou fazendo em powershell


    Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew !

    terça-feira, 19 de fevereiro de 2013 19:40
  • Realmente, eu coloquei a expressão "crua". Em c# seria assim:

    Regex r = new Regex(@"url=""([^""]*)""", RegexOptions.IgnoreCase);
    MatchCollection m = r.Matches(...);

    Em powershell deve ser semelhante.

    terça-feira, 19 de fevereiro de 2013 20:16