How to replace custom bbcode tag containing structured content?
I have a string as this one: "[dr]azAZ09-09[/dr]"
Example: [dr]my name here-25[/dr]
I want to get all the elements:
my name here
-
25
How can I write the preg_split()
expression (or another function)?
php regex preg-replace bbcode
add a comment |
I have a string as this one: "[dr]azAZ09-09[/dr]"
Example: [dr]my name here-25[/dr]
I want to get all the elements:
my name here
-
25
How can I write the preg_split()
expression (or another function)?
php regex preg-replace bbcode
1
Does your string always start with[dr]
and end with[/dr]
?
– Jeto
Nov 10 '18 at 10:55
1
What defines "element"? For instance, what do you expect for[dx]a?})---7y3/!4[$[/dx]abcdef
?
– trincot
Nov 10 '18 at 10:55
1
Can you include more sample data?
– Tim Biegeleisen
Nov 10 '18 at 10:58
@Lilia There are more than 10 different "correct" ways to do this. We simply don't know enough about your question requirements. Please explain how your input data may vary. Tell us more about the process logic so that we can be sure to offer you the best possible pattern. Is[dr]azAZ09-09[/dr]
an example of an entire input string or might it be a substring of a much larger portion of text?
– mickmackusa
Nov 10 '18 at 12:33
I explain better: I extract several posts from the DB. If in the posts insertion textarea the user enters the following "bbcode":[dr] every thing - number [/dr]
I must intercept this string and turn it into a quote, during the insert in the DB. Of course, the user can arbitrarily modify that string but I just have at least "-" and "number" because then I will need to do other things in the php code
– Lilia
Nov 10 '18 at 17:07
add a comment |
I have a string as this one: "[dr]azAZ09-09[/dr]"
Example: [dr]my name here-25[/dr]
I want to get all the elements:
my name here
-
25
How can I write the preg_split()
expression (or another function)?
php regex preg-replace bbcode
I have a string as this one: "[dr]azAZ09-09[/dr]"
Example: [dr]my name here-25[/dr]
I want to get all the elements:
my name here
-
25
How can I write the preg_split()
expression (or another function)?
php regex preg-replace bbcode
php regex preg-replace bbcode
edited Nov 10 '18 at 23:16
mickmackusa
22.8k103356
22.8k103356
asked Nov 10 '18 at 10:50
LiliaLilia
12
12
1
Does your string always start with[dr]
and end with[/dr]
?
– Jeto
Nov 10 '18 at 10:55
1
What defines "element"? For instance, what do you expect for[dx]a?})---7y3/!4[$[/dx]abcdef
?
– trincot
Nov 10 '18 at 10:55
1
Can you include more sample data?
– Tim Biegeleisen
Nov 10 '18 at 10:58
@Lilia There are more than 10 different "correct" ways to do this. We simply don't know enough about your question requirements. Please explain how your input data may vary. Tell us more about the process logic so that we can be sure to offer you the best possible pattern. Is[dr]azAZ09-09[/dr]
an example of an entire input string or might it be a substring of a much larger portion of text?
– mickmackusa
Nov 10 '18 at 12:33
I explain better: I extract several posts from the DB. If in the posts insertion textarea the user enters the following "bbcode":[dr] every thing - number [/dr]
I must intercept this string and turn it into a quote, during the insert in the DB. Of course, the user can arbitrarily modify that string but I just have at least "-" and "number" because then I will need to do other things in the php code
– Lilia
Nov 10 '18 at 17:07
add a comment |
1
Does your string always start with[dr]
and end with[/dr]
?
– Jeto
Nov 10 '18 at 10:55
1
What defines "element"? For instance, what do you expect for[dx]a?})---7y3/!4[$[/dx]abcdef
?
– trincot
Nov 10 '18 at 10:55
1
Can you include more sample data?
– Tim Biegeleisen
Nov 10 '18 at 10:58
@Lilia There are more than 10 different "correct" ways to do this. We simply don't know enough about your question requirements. Please explain how your input data may vary. Tell us more about the process logic so that we can be sure to offer you the best possible pattern. Is[dr]azAZ09-09[/dr]
an example of an entire input string or might it be a substring of a much larger portion of text?
– mickmackusa
Nov 10 '18 at 12:33
I explain better: I extract several posts from the DB. If in the posts insertion textarea the user enters the following "bbcode":[dr] every thing - number [/dr]
I must intercept this string and turn it into a quote, during the insert in the DB. Of course, the user can arbitrarily modify that string but I just have at least "-" and "number" because then I will need to do other things in the php code
– Lilia
Nov 10 '18 at 17:07
1
1
Does your string always start with
[dr]
and end with [/dr]
?– Jeto
Nov 10 '18 at 10:55
Does your string always start with
[dr]
and end with [/dr]
?– Jeto
Nov 10 '18 at 10:55
1
1
What defines "element"? For instance, what do you expect for
[dx]a?})---7y3/!4[$[/dx]abcdef
?– trincot
Nov 10 '18 at 10:55
What defines "element"? For instance, what do you expect for
[dx]a?})---7y3/!4[$[/dx]abcdef
?– trincot
Nov 10 '18 at 10:55
1
1
Can you include more sample data?
– Tim Biegeleisen
Nov 10 '18 at 10:58
Can you include more sample data?
– Tim Biegeleisen
Nov 10 '18 at 10:58
@Lilia There are more than 10 different "correct" ways to do this. We simply don't know enough about your question requirements. Please explain how your input data may vary. Tell us more about the process logic so that we can be sure to offer you the best possible pattern. Is
[dr]azAZ09-09[/dr]
an example of an entire input string or might it be a substring of a much larger portion of text?– mickmackusa
Nov 10 '18 at 12:33
@Lilia There are more than 10 different "correct" ways to do this. We simply don't know enough about your question requirements. Please explain how your input data may vary. Tell us more about the process logic so that we can be sure to offer you the best possible pattern. Is
[dr]azAZ09-09[/dr]
an example of an entire input string or might it be a substring of a much larger portion of text?– mickmackusa
Nov 10 '18 at 12:33
I explain better: I extract several posts from the DB. If in the posts insertion textarea the user enters the following "bbcode":
[dr] every thing - number [/dr]
I must intercept this string and turn it into a quote, during the insert in the DB. Of course, the user can arbitrarily modify that string but I just have at least "-" and "number" because then I will need to do other things in the php code– Lilia
Nov 10 '18 at 17:07
I explain better: I extract several posts from the DB. If in the posts insertion textarea the user enters the following "bbcode":
[dr] every thing - number [/dr]
I must intercept this string and turn it into a quote, during the insert in the DB. Of course, the user can arbitrarily modify that string but I just have at least "-" and "number" because then I will need to do other things in the php code– Lilia
Nov 10 '18 at 17:07
add a comment |
1 Answer
1
active
oldest
votes
It is unclear whether you need to do a simple preg_replace()
or preg_replace_callback()
(because you "need to do other things in the php code").
The best solution that I can offer you now is to use this pattern that requires [dr]
|[/dr]
tagging and a -
substring delimiter followed by one or more digits.
Pattern: (Demo)
# ⬐⬐⬐------------⬐⬐⬐⬐--------------- match opening and closing tags
# ↓↓↓↓↓ ↓↓↓↓↓↓↓
~[dr](.+?)-(d+)[/dr]~
# ↑↑↑ ⬑⬑⬑---------------------- capture one or more digits
# ⬑⬑----------------------------- capture one or more of any character
With these two captured substrings, you can use preg_replace()
to generate a new dynamic replacements string.
Code: (Demo)
$bbcode = '[dr]my name here-25[/dr]';
echo preg_replace('~[dr](.+?)-(d+)[/dr]~', '<div>Reply to: <a href="user.php?id=$2">$1</a></div>', $bbcode);
Output:
<div>Reply to: <a href="user.php?id=25">my name here</a></div>
now your pattern works. Only one thing: how can I get the "-number" part? Example: [dr]my name here-25[/dr] I need of 25
– Lilia
Nov 11 '18 at 14:13
Please better explain your process and include your coding attempt. I can easily solve what you are doing if I can see your desired outcome. I have a feeling that you wantpreg_replace_callback()
.
– mickmackusa
Nov 11 '18 at 20:38
$search = array( '{[dr](.+?)-(d+)[/dr]}siU' ); $replace = array( '<div>Reply to: \2 [here I need a link to -NUMBER]</div>' ); $newvar = preg_replace($search, $replace, $newvar);
– Lilia
Nov 12 '18 at 17:49
So what will your exact desired output be, given your sample input?<div>Reply to: <a href="user.php?id=[thenumber]">[thenumber]</a></div>
? or do you need to run a "lookup" and replace [thenumber] with some other value?
– mickmackusa
Nov 12 '18 at 23:15
the href tag you indicated would be perfect for me
– Lilia
Nov 13 '18 at 18:39
|
show 2 more comments
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%2f53238194%2fhow-to-replace-custom-bbcode-tag-containing-structured-content%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
It is unclear whether you need to do a simple preg_replace()
or preg_replace_callback()
(because you "need to do other things in the php code").
The best solution that I can offer you now is to use this pattern that requires [dr]
|[/dr]
tagging and a -
substring delimiter followed by one or more digits.
Pattern: (Demo)
# ⬐⬐⬐------------⬐⬐⬐⬐--------------- match opening and closing tags
# ↓↓↓↓↓ ↓↓↓↓↓↓↓
~[dr](.+?)-(d+)[/dr]~
# ↑↑↑ ⬑⬑⬑---------------------- capture one or more digits
# ⬑⬑----------------------------- capture one or more of any character
With these two captured substrings, you can use preg_replace()
to generate a new dynamic replacements string.
Code: (Demo)
$bbcode = '[dr]my name here-25[/dr]';
echo preg_replace('~[dr](.+?)-(d+)[/dr]~', '<div>Reply to: <a href="user.php?id=$2">$1</a></div>', $bbcode);
Output:
<div>Reply to: <a href="user.php?id=25">my name here</a></div>
now your pattern works. Only one thing: how can I get the "-number" part? Example: [dr]my name here-25[/dr] I need of 25
– Lilia
Nov 11 '18 at 14:13
Please better explain your process and include your coding attempt. I can easily solve what you are doing if I can see your desired outcome. I have a feeling that you wantpreg_replace_callback()
.
– mickmackusa
Nov 11 '18 at 20:38
$search = array( '{[dr](.+?)-(d+)[/dr]}siU' ); $replace = array( '<div>Reply to: \2 [here I need a link to -NUMBER]</div>' ); $newvar = preg_replace($search, $replace, $newvar);
– Lilia
Nov 12 '18 at 17:49
So what will your exact desired output be, given your sample input?<div>Reply to: <a href="user.php?id=[thenumber]">[thenumber]</a></div>
? or do you need to run a "lookup" and replace [thenumber] with some other value?
– mickmackusa
Nov 12 '18 at 23:15
the href tag you indicated would be perfect for me
– Lilia
Nov 13 '18 at 18:39
|
show 2 more comments
It is unclear whether you need to do a simple preg_replace()
or preg_replace_callback()
(because you "need to do other things in the php code").
The best solution that I can offer you now is to use this pattern that requires [dr]
|[/dr]
tagging and a -
substring delimiter followed by one or more digits.
Pattern: (Demo)
# ⬐⬐⬐------------⬐⬐⬐⬐--------------- match opening and closing tags
# ↓↓↓↓↓ ↓↓↓↓↓↓↓
~[dr](.+?)-(d+)[/dr]~
# ↑↑↑ ⬑⬑⬑---------------------- capture one or more digits
# ⬑⬑----------------------------- capture one or more of any character
With these two captured substrings, you can use preg_replace()
to generate a new dynamic replacements string.
Code: (Demo)
$bbcode = '[dr]my name here-25[/dr]';
echo preg_replace('~[dr](.+?)-(d+)[/dr]~', '<div>Reply to: <a href="user.php?id=$2">$1</a></div>', $bbcode);
Output:
<div>Reply to: <a href="user.php?id=25">my name here</a></div>
now your pattern works. Only one thing: how can I get the "-number" part? Example: [dr]my name here-25[/dr] I need of 25
– Lilia
Nov 11 '18 at 14:13
Please better explain your process and include your coding attempt. I can easily solve what you are doing if I can see your desired outcome. I have a feeling that you wantpreg_replace_callback()
.
– mickmackusa
Nov 11 '18 at 20:38
$search = array( '{[dr](.+?)-(d+)[/dr]}siU' ); $replace = array( '<div>Reply to: \2 [here I need a link to -NUMBER]</div>' ); $newvar = preg_replace($search, $replace, $newvar);
– Lilia
Nov 12 '18 at 17:49
So what will your exact desired output be, given your sample input?<div>Reply to: <a href="user.php?id=[thenumber]">[thenumber]</a></div>
? or do you need to run a "lookup" and replace [thenumber] with some other value?
– mickmackusa
Nov 12 '18 at 23:15
the href tag you indicated would be perfect for me
– Lilia
Nov 13 '18 at 18:39
|
show 2 more comments
It is unclear whether you need to do a simple preg_replace()
or preg_replace_callback()
(because you "need to do other things in the php code").
The best solution that I can offer you now is to use this pattern that requires [dr]
|[/dr]
tagging and a -
substring delimiter followed by one or more digits.
Pattern: (Demo)
# ⬐⬐⬐------------⬐⬐⬐⬐--------------- match opening and closing tags
# ↓↓↓↓↓ ↓↓↓↓↓↓↓
~[dr](.+?)-(d+)[/dr]~
# ↑↑↑ ⬑⬑⬑---------------------- capture one or more digits
# ⬑⬑----------------------------- capture one or more of any character
With these two captured substrings, you can use preg_replace()
to generate a new dynamic replacements string.
Code: (Demo)
$bbcode = '[dr]my name here-25[/dr]';
echo preg_replace('~[dr](.+?)-(d+)[/dr]~', '<div>Reply to: <a href="user.php?id=$2">$1</a></div>', $bbcode);
Output:
<div>Reply to: <a href="user.php?id=25">my name here</a></div>
It is unclear whether you need to do a simple preg_replace()
or preg_replace_callback()
(because you "need to do other things in the php code").
The best solution that I can offer you now is to use this pattern that requires [dr]
|[/dr]
tagging and a -
substring delimiter followed by one or more digits.
Pattern: (Demo)
# ⬐⬐⬐------------⬐⬐⬐⬐--------------- match opening and closing tags
# ↓↓↓↓↓ ↓↓↓↓↓↓↓
~[dr](.+?)-(d+)[/dr]~
# ↑↑↑ ⬑⬑⬑---------------------- capture one or more digits
# ⬑⬑----------------------------- capture one or more of any character
With these two captured substrings, you can use preg_replace()
to generate a new dynamic replacements string.
Code: (Demo)
$bbcode = '[dr]my name here-25[/dr]';
echo preg_replace('~[dr](.+?)-(d+)[/dr]~', '<div>Reply to: <a href="user.php?id=$2">$1</a></div>', $bbcode);
Output:
<div>Reply to: <a href="user.php?id=25">my name here</a></div>
edited Nov 13 '18 at 20:03
answered Nov 10 '18 at 23:10
mickmackusamickmackusa
22.8k103356
22.8k103356
now your pattern works. Only one thing: how can I get the "-number" part? Example: [dr]my name here-25[/dr] I need of 25
– Lilia
Nov 11 '18 at 14:13
Please better explain your process and include your coding attempt. I can easily solve what you are doing if I can see your desired outcome. I have a feeling that you wantpreg_replace_callback()
.
– mickmackusa
Nov 11 '18 at 20:38
$search = array( '{[dr](.+?)-(d+)[/dr]}siU' ); $replace = array( '<div>Reply to: \2 [here I need a link to -NUMBER]</div>' ); $newvar = preg_replace($search, $replace, $newvar);
– Lilia
Nov 12 '18 at 17:49
So what will your exact desired output be, given your sample input?<div>Reply to: <a href="user.php?id=[thenumber]">[thenumber]</a></div>
? or do you need to run a "lookup" and replace [thenumber] with some other value?
– mickmackusa
Nov 12 '18 at 23:15
the href tag you indicated would be perfect for me
– Lilia
Nov 13 '18 at 18:39
|
show 2 more comments
now your pattern works. Only one thing: how can I get the "-number" part? Example: [dr]my name here-25[/dr] I need of 25
– Lilia
Nov 11 '18 at 14:13
Please better explain your process and include your coding attempt. I can easily solve what you are doing if I can see your desired outcome. I have a feeling that you wantpreg_replace_callback()
.
– mickmackusa
Nov 11 '18 at 20:38
$search = array( '{[dr](.+?)-(d+)[/dr]}siU' ); $replace = array( '<div>Reply to: \2 [here I need a link to -NUMBER]</div>' ); $newvar = preg_replace($search, $replace, $newvar);
– Lilia
Nov 12 '18 at 17:49
So what will your exact desired output be, given your sample input?<div>Reply to: <a href="user.php?id=[thenumber]">[thenumber]</a></div>
? or do you need to run a "lookup" and replace [thenumber] with some other value?
– mickmackusa
Nov 12 '18 at 23:15
the href tag you indicated would be perfect for me
– Lilia
Nov 13 '18 at 18:39
now your pattern works. Only one thing: how can I get the "-number" part? Example: [dr]my name here-25[/dr] I need of 25
– Lilia
Nov 11 '18 at 14:13
now your pattern works. Only one thing: how can I get the "-number" part? Example: [dr]my name here-25[/dr] I need of 25
– Lilia
Nov 11 '18 at 14:13
Please better explain your process and include your coding attempt. I can easily solve what you are doing if I can see your desired outcome. I have a feeling that you want
preg_replace_callback()
.– mickmackusa
Nov 11 '18 at 20:38
Please better explain your process and include your coding attempt. I can easily solve what you are doing if I can see your desired outcome. I have a feeling that you want
preg_replace_callback()
.– mickmackusa
Nov 11 '18 at 20:38
$search = array( '{[dr](.+?)-(d+)[/dr]}siU' ); $replace = array( '<div>Reply to: \2 [here I need a link to -NUMBER]</div>' ); $newvar = preg_replace($search, $replace, $newvar);
– Lilia
Nov 12 '18 at 17:49
$search = array( '{[dr](.+?)-(d+)[/dr]}siU' ); $replace = array( '<div>Reply to: \2 [here I need a link to -NUMBER]</div>' ); $newvar = preg_replace($search, $replace, $newvar);
– Lilia
Nov 12 '18 at 17:49
So what will your exact desired output be, given your sample input?
<div>Reply to: <a href="user.php?id=[thenumber]">[thenumber]</a></div>
? or do you need to run a "lookup" and replace [thenumber] with some other value?– mickmackusa
Nov 12 '18 at 23:15
So what will your exact desired output be, given your sample input?
<div>Reply to: <a href="user.php?id=[thenumber]">[thenumber]</a></div>
? or do you need to run a "lookup" and replace [thenumber] with some other value?– mickmackusa
Nov 12 '18 at 23:15
the href tag you indicated would be perfect for me
– Lilia
Nov 13 '18 at 18:39
the href tag you indicated would be perfect for me
– Lilia
Nov 13 '18 at 18:39
|
show 2 more comments
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%2f53238194%2fhow-to-replace-custom-bbcode-tag-containing-structured-content%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
1
Does your string always start with
[dr]
and end with[/dr]
?– Jeto
Nov 10 '18 at 10:55
1
What defines "element"? For instance, what do you expect for
[dx]a?})---7y3/!4[$[/dx]abcdef
?– trincot
Nov 10 '18 at 10:55
1
Can you include more sample data?
– Tim Biegeleisen
Nov 10 '18 at 10:58
@Lilia There are more than 10 different "correct" ways to do this. We simply don't know enough about your question requirements. Please explain how your input data may vary. Tell us more about the process logic so that we can be sure to offer you the best possible pattern. Is
[dr]azAZ09-09[/dr]
an example of an entire input string or might it be a substring of a much larger portion of text?– mickmackusa
Nov 10 '18 at 12:33
I explain better: I extract several posts from the DB. If in the posts insertion textarea the user enters the following "bbcode":
[dr] every thing - number [/dr]
I must intercept this string and turn it into a quote, during the insert in the DB. Of course, the user can arbitrarily modify that string but I just have at least "-" and "number" because then I will need to do other things in the php code– Lilia
Nov 10 '18 at 17:07