【问题标题】:Delete first and last lines from string从字符串中删除第一行和最后一行
【发布时间】:2013-12-04 23:54:16
【问题描述】:

我有一个名为 $post 的字符串(例如),其中包含以下数据。我想删除第一个“TEXT”之前的行(我不知道会有多少标签,所以不可能有确切的行)。我还想删除最后一个“TEXT”下面的所有行。

<div id="content">
                    <div class="date">2013-02-11      16:19:57</div>
                    <h2 class="storytitle"><a href="p.php?slug=SOMESLUG">PRPHAHAHAH</a></h2>

                    <!-- TAGS -->
                    <div class="tags"><a href="/tag/">slug1</a> <a href="/tag/">slug2</a> <a href="/tag/">slug3</a> </div>TEXT<br />
TEXT<br />
TEXT<br />
TEXT<br />
TEXT<br />
<br />
<pre><code>1
2
3
4
5
</code></pre><br />
<br />
TEXT

                    <p id="comments" class="separator-story">
                        <!-- <div class="comments"></a href="/post/Somepost" -->
                    </p>
                    </div>

我唯一想在我的字符串中包含以下内容:

TEXT<br />
    TEXT<br />
    TEXT<br />
    TEXT<br />
    TEXT<br />
    <br />
    <pre><code>1
    2
    3
    4
    5
    </code></pre><br />
    <br />
    TEXT

注意:

  • 我不知道用户会有多少标签,也不知道我有多少行 从开始删除,最后意味着我不知道首先在哪里 “文本”开始。
  • 我不知道帖子会有多大,也不知道从哪里开始 我开始删除。
  • 我只知道最后有5行 我需要将它们移除。我只知道标签以 and 结尾 最后几行以
  • 我不知道我需要提取的文本的第一个字母/单词是什么(TEXT 只是示例)

参考:
Explode (PHP)
Array Slice (PHP)

【问题讨论】:

    标签: php string file lines


    【解决方案1】:

    只需找到 firstlast 的出现,并使用它们来构建您的字符串:

    $input  = (your input string);
    $search = 'TEXT';
    $first  = strpos($input, $search);
    $last   = strrpos($input, $search);
    
    $final  = substr($input, $first, strlen($input) - $first - $last);
    

    参考strposstrrpossubstr

    【讨论】:

    • 啊,如果我不够清楚,抱歉。我刚刚添加了一个新项目符号,请查看。我不知道第一个字母/单词是什么。感谢您的参考和回答。
    • 如果你不知道我们要找的TEXT这个词,确定它的逻辑是什么?
    • 最后一个标签以“
      ”结束
    【解决方案2】:

    给你!

    $test= <<<EOM
    <div id="content">
                        <div class="date">2013-02-11      16:19:57</div>
                        <h2 class="storytitle"><a href="p.php?slug=SOMESLUG">PRPHAHAHAH</a></h2>
    
                        <!-- TAGS -->
                        <div class="tags"><a href="/tag/">slug1</a> <a href="/tag/">slug2</a> <a href="/tag/">slug3</a> </div>TEXT<br />
    TEXT<br />
    TEXT<br />
    TEXT<br />
    TEXT<br />
    <br />
    <pre><code>1
    2
    3
    4
    5
    </code></pre><br />
    <br />
    TEXT
    
                        <p id="comments" class="separator-story">
                            <!-- <div class="comments"></a href="/post/Somepost" -->
                        </p>
                        </div>
    EOM;
    
    
    $tok = strtok($test, "\n");
    
    $found_start = false;
    $found_middle = false;
    $found_end = false;
    
    $string_start = "";
    $string_middle = "";
    $string_end = "";
    
    while ($tok !== false) {
        if ( strpos(str_replace(" ", "", $tok), "TEXT" ) === 0) {
          if(!$found_middle){
            //middle not found yet, so still looking for start
            $string_start = $string_start . $tok;
            $found_start = true;
          } else { 
            //middle found and this token starts with the key, so it is the end
            $string_end = $tok;
            $found_end = true;
          }
        } else if($found_start) {
            $string_middle = $string_middle . $tok;
            $found_middle = true;
        }
        if(!$found_end){
          $tok = strtok("\n");
        } else {
          $tok = false;
        }
    }
    
    echo $string_start . $string_middle . $string_end;
    

    【讨论】:

    • 哎呀,那代码很大。正如您在我的问题的最后一个项目符号中看到的那样,我不知道文本是如何开始的。我不知道一开始是否会有“TEXT”段落。但是这里是为你投票的,谢谢你的贡献!
    猜你喜欢
    • 1970-01-01
    • 2015-03-23
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 2013-12-12
    • 2016-12-12
    相关资源
    最近更新 更多