PHP Regex - how to remove string after “Newline * regards”
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
add a comment |
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
add a comment |
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
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
php regex
asked Nov 14 '18 at 2:56
user6122500user6122500
196114
196114
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
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).
add a comment |
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);
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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).
add a comment |
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).
add a comment |
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).
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).
edited Nov 14 '18 at 3:10
answered Nov 14 '18 at 3:05
PhilPhil
98.1k11143161
98.1k11143161
add a comment |
add a comment |
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);
add a comment |
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);
add a comment |
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);
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);
answered Nov 14 '18 at 3:06
CertainPerformanceCertainPerformance
89.5k165177
89.5k165177
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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