PHP Regex - how to remove string after “Newline * regards”










1















I've got strings like the following:



Hi X

Blah

Kind regards
ABC


And



Hi X

Blah

Regards
CBA


So the key is the newline and the word "regards" (case insensitive). I'd like to use PHP to get the part of the string before the line that contains "regards". E.g. for these examples, the result should just be:



Hi X

Blah


I've tried the below but it doesn't work as intended in some cases (E.g. if "Kind" appears multiple times in the string). Thanks in advance!



 $matches = array();
if (preg_match("/n(.*?)regards/i", $message, $matches) == 1)
$stop_at = $matches[1];
$split = explode($stop_at,$message);
$message = $split[0];










share|improve this question


























    1















    I've got strings like the following:



    Hi X

    Blah

    Kind regards
    ABC


    And



    Hi X

    Blah

    Regards
    CBA


    So the key is the newline and the word "regards" (case insensitive). I'd like to use PHP to get the part of the string before the line that contains "regards". E.g. for these examples, the result should just be:



    Hi X

    Blah


    I've tried the below but it doesn't work as intended in some cases (E.g. if "Kind" appears multiple times in the string). Thanks in advance!



     $matches = array();
    if (preg_match("/n(.*?)regards/i", $message, $matches) == 1)
    $stop_at = $matches[1];
    $split = explode($stop_at,$message);
    $message = $split[0];










    share|improve this question
























      1












      1








      1








      I've got strings like the following:



      Hi X

      Blah

      Kind regards
      ABC


      And



      Hi X

      Blah

      Regards
      CBA


      So the key is the newline and the word "regards" (case insensitive). I'd like to use PHP to get the part of the string before the line that contains "regards". E.g. for these examples, the result should just be:



      Hi X

      Blah


      I've tried the below but it doesn't work as intended in some cases (E.g. if "Kind" appears multiple times in the string). Thanks in advance!



       $matches = array();
      if (preg_match("/n(.*?)regards/i", $message, $matches) == 1)
      $stop_at = $matches[1];
      $split = explode($stop_at,$message);
      $message = $split[0];










      share|improve this question














      I've got strings like the following:



      Hi X

      Blah

      Kind regards
      ABC


      And



      Hi X

      Blah

      Regards
      CBA


      So the key is the newline and the word "regards" (case insensitive). I'd like to use PHP to get the part of the string before the line that contains "regards". E.g. for these examples, the result should just be:



      Hi X

      Blah


      I've tried the below but it doesn't work as intended in some cases (E.g. if "Kind" appears multiple times in the string). Thanks in advance!



       $matches = array();
      if (preg_match("/n(.*?)regards/i", $message, $matches) == 1)
      $stop_at = $matches[1];
      $split = explode($stop_at,$message);
      $message = $split[0];







      php regex






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 14 '18 at 2:56









      user6122500user6122500

      196114




      196114






















          2 Answers
          2






          active

          oldest

          votes


















          1














          What you're really after is a regex that handles multi-line strings. For this, you can use the m flag (PCRE_MULTILINE).



          I would use preg_split() to split the string on your token, for example



          $found = trim(preg_split('/^.*regards$/im', $message, 2)[0]);


          Demo ~ https://3v4l.org/idMcP




          Some notes:



          • I've used trim() to remove the empty line after "Blah" (your examples exclude it)

          • I've set a limit of 2 on preg_split(). This is redundant given you're only retrieving the first split but in my head, it means PHP does less work (realities may vary).

          • This might fail if a line ends in a word ending in "regards" but not necessarily the word "regards", for example this word I just made up "goregards" (it's like a shin guard but for viscera).





          share|improve this answer
































            0














            You can use the regular expression



            (?si).+b(?=n+[w ]*regards)


            It will match everything up to a word boundary, then lookahead for newline(s) followed by a line which has regards on it (possibly preceeded by a combination of word characters or spaces).



            $str = "Hi X

            Blah

            Kind regards
            ABC";
            preg_match('/(?si).+b(?=ns*[w ]*regards)/', $str, $match);





            share|improve this answer






















              Your Answer






              StackExchange.ifUsing("editor", function ()
              StackExchange.using("externalEditor", function ()
              StackExchange.using("snippets", function ()
              StackExchange.snippets.init();
              );
              );
              , "code-snippets");

              StackExchange.ready(function()
              var channelOptions =
              tags: "".split(" "),
              id: "1"
              ;
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function()
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled)
              StackExchange.using("snippets", function()
              createEditor();
              );

              else
              createEditor();

              );

              function createEditor()
              StackExchange.prepareEditor(
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader:
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              ,
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              );



              );













              draft saved

              draft discarded


















              StackExchange.ready(
              function ()
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53292534%2fphp-regex-how-to-remove-string-after-newline-regards%23new-answer', 'question_page');

              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              1














              What you're really after is a regex that handles multi-line strings. For this, you can use the m flag (PCRE_MULTILINE).



              I would use preg_split() to split the string on your token, for example



              $found = trim(preg_split('/^.*regards$/im', $message, 2)[0]);


              Demo ~ https://3v4l.org/idMcP




              Some notes:



              • I've used trim() to remove the empty line after "Blah" (your examples exclude it)

              • I've set a limit of 2 on preg_split(). This is redundant given you're only retrieving the first split but in my head, it means PHP does less work (realities may vary).

              • This might fail if a line ends in a word ending in "regards" but not necessarily the word "regards", for example this word I just made up "goregards" (it's like a shin guard but for viscera).





              share|improve this answer





























                1














                What you're really after is a regex that handles multi-line strings. For this, you can use the m flag (PCRE_MULTILINE).



                I would use preg_split() to split the string on your token, for example



                $found = trim(preg_split('/^.*regards$/im', $message, 2)[0]);


                Demo ~ https://3v4l.org/idMcP




                Some notes:



                • I've used trim() to remove the empty line after "Blah" (your examples exclude it)

                • I've set a limit of 2 on preg_split(). This is redundant given you're only retrieving the first split but in my head, it means PHP does less work (realities may vary).

                • This might fail if a line ends in a word ending in "regards" but not necessarily the word "regards", for example this word I just made up "goregards" (it's like a shin guard but for viscera).





                share|improve this answer



























                  1












                  1








                  1







                  What you're really after is a regex that handles multi-line strings. For this, you can use the m flag (PCRE_MULTILINE).



                  I would use preg_split() to split the string on your token, for example



                  $found = trim(preg_split('/^.*regards$/im', $message, 2)[0]);


                  Demo ~ https://3v4l.org/idMcP




                  Some notes:



                  • I've used trim() to remove the empty line after "Blah" (your examples exclude it)

                  • I've set a limit of 2 on preg_split(). This is redundant given you're only retrieving the first split but in my head, it means PHP does less work (realities may vary).

                  • This might fail if a line ends in a word ending in "regards" but not necessarily the word "regards", for example this word I just made up "goregards" (it's like a shin guard but for viscera).





                  share|improve this answer















                  What you're really after is a regex that handles multi-line strings. For this, you can use the m flag (PCRE_MULTILINE).



                  I would use preg_split() to split the string on your token, for example



                  $found = trim(preg_split('/^.*regards$/im', $message, 2)[0]);


                  Demo ~ https://3v4l.org/idMcP




                  Some notes:



                  • I've used trim() to remove the empty line after "Blah" (your examples exclude it)

                  • I've set a limit of 2 on preg_split(). This is redundant given you're only retrieving the first split but in my head, it means PHP does less work (realities may vary).

                  • This might fail if a line ends in a word ending in "regards" but not necessarily the word "regards", for example this word I just made up "goregards" (it's like a shin guard but for viscera).






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Nov 14 '18 at 3:10

























                  answered Nov 14 '18 at 3:05









                  PhilPhil

                  98.1k11143161




                  98.1k11143161























                      0














                      You can use the regular expression



                      (?si).+b(?=n+[w ]*regards)


                      It will match everything up to a word boundary, then lookahead for newline(s) followed by a line which has regards on it (possibly preceeded by a combination of word characters or spaces).



                      $str = "Hi X

                      Blah

                      Kind regards
                      ABC";
                      preg_match('/(?si).+b(?=ns*[w ]*regards)/', $str, $match);





                      share|improve this answer



























                        0














                        You can use the regular expression



                        (?si).+b(?=n+[w ]*regards)


                        It will match everything up to a word boundary, then lookahead for newline(s) followed by a line which has regards on it (possibly preceeded by a combination of word characters or spaces).



                        $str = "Hi X

                        Blah

                        Kind regards
                        ABC";
                        preg_match('/(?si).+b(?=ns*[w ]*regards)/', $str, $match);





                        share|improve this answer

























                          0












                          0








                          0







                          You can use the regular expression



                          (?si).+b(?=n+[w ]*regards)


                          It will match everything up to a word boundary, then lookahead for newline(s) followed by a line which has regards on it (possibly preceeded by a combination of word characters or spaces).



                          $str = "Hi X

                          Blah

                          Kind regards
                          ABC";
                          preg_match('/(?si).+b(?=ns*[w ]*regards)/', $str, $match);





                          share|improve this answer













                          You can use the regular expression



                          (?si).+b(?=n+[w ]*regards)


                          It will match everything up to a word boundary, then lookahead for newline(s) followed by a line which has regards on it (possibly preceeded by a combination of word characters or spaces).



                          $str = "Hi X

                          Blah

                          Kind regards
                          ABC";
                          preg_match('/(?si).+b(?=ns*[w ]*regards)/', $str, $match);






                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Nov 14 '18 at 3:06









                          CertainPerformanceCertainPerformance

                          89.5k165177




                          89.5k165177



























                              draft saved

                              draft discarded
















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid


                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.

                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function ()
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53292534%2fphp-regex-how-to-remove-string-after-newline-regards%23new-answer', 'question_page');

                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              How to how show current date and time by default on contact form 7 in WordPress without taking input from user in datetimepicker

                              Syphilis

                              Darth Vader #20