【问题标题】:Which is the best way to detect function call patterns in file哪个是检测文件中函数调用模式的最佳方法
【发布时间】:2021-04-12 13:31:57
【问题描述】:

我有一个字符串中的下一个代码:

<div class="navbar-nav navbar-right">
            <span class="text-muted my-2 my-sm-0 mx-2">@lang('Welcome, user', ['user'=> $user]). {{ $login }} {!! $adminBadge !!}</span>
        </div>
        <div class="navbar-nav navbar-right">
            <a href="{{ route('logout') }}" class="btn btn-outline-success my-2 my-sm-0" role="button">@lang('menu.close_session')</a>@lang('This is a very @lang("gag") complex string') another {{ __('call example') }} call
        </div>

问题是我想获取每个 @lang()__() 中包含的所有字符串,但我不知道最好的获取方法是什么,使用正则表达式它不适用于下一个模式: @lang\('([^']+)'\) 由于这将在 @lang('something\'asohgag')@lang('Another faled \'string\'oagha') 上失败 如何解决此问题以确保成功检查所有 @lang 调用? 谢谢!

【问题讨论】:

    标签: php regex string


    【解决方案1】:

    我找到了一个解决方案,感谢网络https://www.metaltoad.com/blog/regex-quoted-string-escapable-quotes,我发现了如何检测包含转义引号的字符串: 生成的代码如下:

    $reStringPattern = "((?<![\\\\])['\"])((?:.(?!(?<![\\\\])\\1))*.?)\\1";
    
    if(preg_match_all("/@lang\({$reStringPattern}(,[^\)]+)?\)/", $content, $matches)) {
    
           $languageKeys += $matches[2];
    }
    

    虽然检测字符串的基本正则表达式没有转义字符:

    ((?<![\\])['"])((?:.(?!(?<![\\])\1))*.?)\1";
    

    所以请注意,在 php 中,由于 RegExp 在字符串内部,必须转义 \" 以避免出现问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      • 2018-07-16
      • 2012-01-29
      • 2018-08-07
      相关资源
      最近更新 更多