Php regexp以匹配模式
我不知道足够的regexp来编写代码,但我知道regexp是正确的方法Php regexp以匹配模式,php,regex,Php,Regex,我不知道足够的regexp来编写代码,但我知道regexp是正确的方法 Input: "2. Some text" Output "%%2.|Some text" Input: "[12] some text" Output: "%%[12]|some text" Input: "(a) this is great" Output: %%(a)|this is great" The matching should be done only if the beginning of
Input: "2. Some text"
Output "%%2.|Some text"
Input: "[12] some text"
Output: "%%[12]|some text"
Input: "(a) this is great"
Output: %%(a)|this is great"
The matching should be done only if the beginning of the string starts with:
A number ("1", "25", "234");
A number followed by a dot ("1.", "25.", "234.");
A number in brackets ("[1]", "[25]", "[234]");
A number in parenthesis ("(1)", "(25)", "(234)");
A roman number in parenthesis ("(i)", "iv", "viii");
A roman number in brackets ("[i], "[iv]", "[viii]");
A single letter followed by a dot ("a.", "B.");
A single letter in parenthesis ("(a)", "(B)");
A single letter in brackets ("[a]", "[B]")
Then followed by at least one space
Then followed by text
Output:
%%
followed by the number/letter in the same formatting as it was found
followed by a pipe "|"
followed by the rest of the string (stripping all spaces between the number/letter and the rest of the text).
您需要使用此正则表达式进行搜索:
^(?:<([ib])>)?([\[(]?\w+[\])]|\w+\.)(?:<\/\1>)?\s+
在线演示:您需要使用此正则表达式进行搜索:
^(?:<([ib])>)?([\[(]?\w+[\])]|\w+\.)(?:<\/\1>)?\s+
在线演示:您需要使用此正则表达式进行搜索:
^(?:<([ib])>)?([\[(]?\w+[\])]|\w+\.)(?:<\/\1>)?\s+
在线演示:您需要使用此正则表达式进行搜索:
^(?:<([ib])>)?([\[(]?\w+[\])]|\w+\.)(?:<\/\1>)?\s+
在线演示:您可以尝试以下方法:
$pattern =<<<'LOD'
~
(?(DEFINE)
(?<roman> m{0,4}(?:cm|cd|d?c{0,3})(?:xc|xl|l?x{0,3})(?:ix|iv|v?i{0,3}) )
)
^
( \( (?: [0-9]+ | \g<roman> | [a-z] ) \)
| \[ (?: [0-9]+ | \g<roman> | [a-z] ) ]
| [0-9]+ \.? | [a-z] \.
) \h*
~xi
LOD;
$result = preg_replace($pattern, '%%$2|', $txt);
$pattern=您可以尝试以下方法:
$pattern =<<<'LOD'
~
(?(DEFINE)
(?<roman> m{0,4}(?:cm|cd|d?c{0,3})(?:xc|xl|l?x{0,3})(?:ix|iv|v?i{0,3}) )
)
^
( \( (?: [0-9]+ | \g<roman> | [a-z] ) \)
| \[ (?: [0-9]+ | \g<roman> | [a-z] ) ]
| [0-9]+ \.? | [a-z] \.
) \h*
~xi
LOD;
$result = preg_replace($pattern, '%%$2|', $txt);
$pattern=您可以尝试以下方法:
$pattern =<<<'LOD'
~
(?(DEFINE)
(?<roman> m{0,4}(?:cm|cd|d?c{0,3})(?:xc|xl|l?x{0,3})(?:ix|iv|v?i{0,3}) )
)
^
( \( (?: [0-9]+ | \g<roman> | [a-z] ) \)
| \[ (?: [0-9]+ | \g<roman> | [a-z] ) ]
| [0-9]+ \.? | [a-z] \.
) \h*
~xi
LOD;
$result = preg_replace($pattern, '%%$2|', $txt);
$pattern=您可以尝试以下方法:
$pattern =<<<'LOD'
~
(?(DEFINE)
(?<roman> m{0,4}(?:cm|cd|d?c{0,3})(?:xc|xl|l?x{0,3})(?:ix|iv|v?i{0,3}) )
)
^
( \( (?: [0-9]+ | \g<roman> | [a-z] ) \)
| \[ (?: [0-9]+ | \g<roman> | [a-z] ) ]
| [0-9]+ \.? | [a-z] \.
) \h*
~xi
LOD;
$result = preg_replace($pattern, '%%$2|', $txt);
$pattern=这应该可以-
$regex = "/^((?:[0-9]+\.)|(?:[a-zA-Z]\.)|(?:\[[0-9]+\])|(?:\[M{0,4}(?:CM|CD|D?C{0,3})(?:XC|XL|L?X{0,3})(?:IX|IV|V?I{0,3})\])|(?:\[[a-zA-Z]+\])|(?:\([a-zA-Z]\))|(?:\([0-9]+\)))\s*(.*)$/";
$replacement = "%%$1|$2";
$arr= Array(
"2. Some text",
"a. Some text",
"[12] some text",
"[iii] some text",
"[a] some text",
"(a) this is great",
"(1) this is great"
);
foreach($arr as $str){
var_dump(preg_replace($regex, $replacement, $str));
}
输出-
/*
OUTPUT
*/
string '%%2.|Some text' (length=14)
string '%%a.|Some text' (length=14)
string '%%[12]|some text' (length=16)
string '%%[iii]|some text' (length=17)
string '%%[a]|some text' (length=15)
string '%%(a)|this is great' (length=19)
string '%%(1)|this is great' (length=19)
这应该是有效的-
$regex = "/^((?:[0-9]+\.)|(?:[a-zA-Z]\.)|(?:\[[0-9]+\])|(?:\[M{0,4}(?:CM|CD|D?C{0,3})(?:XC|XL|L?X{0,3})(?:IX|IV|V?I{0,3})\])|(?:\[[a-zA-Z]+\])|(?:\([a-zA-Z]\))|(?:\([0-9]+\)))\s*(.*)$/";
$replacement = "%%$1|$2";
$arr= Array(
"2. Some text",
"a. Some text",
"[12] some text",
"[iii] some text",
"[a] some text",
"(a) this is great",
"(1) this is great"
);
foreach($arr as $str){
var_dump(preg_replace($regex, $replacement, $str));
}
输出-
/*
OUTPUT
*/
string '%%2.|Some text' (length=14)
string '%%a.|Some text' (length=14)
string '%%[12]|some text' (length=16)
string '%%[iii]|some text' (length=17)
string '%%[a]|some text' (length=15)
string '%%(a)|this is great' (length=19)
string '%%(1)|this is great' (length=19)
这应该是有效的-
$regex = "/^((?:[0-9]+\.)|(?:[a-zA-Z]\.)|(?:\[[0-9]+\])|(?:\[M{0,4}(?:CM|CD|D?C{0,3})(?:XC|XL|L?X{0,3})(?:IX|IV|V?I{0,3})\])|(?:\[[a-zA-Z]+\])|(?:\([a-zA-Z]\))|(?:\([0-9]+\)))\s*(.*)$/";
$replacement = "%%$1|$2";
$arr= Array(
"2. Some text",
"a. Some text",
"[12] some text",
"[iii] some text",
"[a] some text",
"(a) this is great",
"(1) this is great"
);
foreach($arr as $str){
var_dump(preg_replace($regex, $replacement, $str));
}
输出-
/*
OUTPUT
*/
string '%%2.|Some text' (length=14)
string '%%a.|Some text' (length=14)
string '%%[12]|some text' (length=16)
string '%%[iii]|some text' (length=17)
string '%%[a]|some text' (length=15)
string '%%(a)|this is great' (length=19)
string '%%(1)|this is great' (length=19)
这应该是有效的-
$regex = "/^((?:[0-9]+\.)|(?:[a-zA-Z]\.)|(?:\[[0-9]+\])|(?:\[M{0,4}(?:CM|CD|D?C{0,3})(?:XC|XL|L?X{0,3})(?:IX|IV|V?I{0,3})\])|(?:\[[a-zA-Z]+\])|(?:\([a-zA-Z]\))|(?:\([0-9]+\)))\s*(.*)$/";
$replacement = "%%$1|$2";
$arr= Array(
"2. Some text",
"a. Some text",
"[12] some text",
"[iii] some text",
"[a] some text",
"(a) this is great",
"(1) this is great"
);
foreach($arr as $str){
var_dump(preg_replace($regex, $replacement, $str));
}
输出-
/*
OUTPUT
*/
string '%%2.|Some text' (length=14)
string '%%a.|Some text' (length=14)
string '%%[12]|some text' (length=16)
string '%%[iii]|some text' (length=17)
string '%%[a]|some text' (length=15)
string '%%(a)|this is great' (length=19)
string '%%(1)|this is great' (length=19)
这几乎是完美的。不考虑多个空格,但只是意识到另一个要匹配的东西是“1”,“2”-即带右括号的数字。你能把它合并起来吗?多个空格的都处理好了(附件中的例子4)谢谢。但是示例4仍然返回%%(12)|一些文本
,当它应该返回%%(12)|一些文本
时,是否有一种方法不允许在括号中使用实际单词?因此,例如,(anubhava)是伟大的
不会触发%%anubhava |是伟大的
?这几乎是完美的。不考虑多个空格,但只是意识到另一个要匹配的东西是“1”,“2”-即带右括号的数字。你能把它合并起来吗?多个空格的都处理好了(附件中的例子4)谢谢。但是示例4仍然返回%%(12)|一些文本
,当它应该返回%%(12)|一些文本
时,是否有一种方法不允许在括号中使用实际单词?因此,例如,(anubhava)是伟大的
不会触发%%anubhava |是伟大的
?这几乎是完美的。不考虑多个空格,但只是意识到另一个要匹配的东西是“1”,“2”-即带右括号的数字。你能把它合并起来吗?多个空格的都处理好了(附件中的例子4)谢谢。但是示例4仍然返回%%(12)|一些文本
,当它应该返回%%(12)|一些文本
时,是否有一种方法不允许在括号中使用实际单词?因此,例如,(anubhava)是伟大的
不会触发%%anubhava |是伟大的
?这几乎是完美的。不考虑多个空格,但只是意识到另一个要匹配的东西是“1”,“2”-即带右括号的数字。你能把它合并起来吗?多个空格的都处理好了(附件中的例子4)谢谢。但是示例4仍然返回%%(12)|一些文本
,当它应该返回%%(12)|一些文本
时,是否有一种方法不允许在括号中使用实际单词?因此,例如,(anubhava)很棒
不会触发%%anubhava |很棒
?这里有一些很棒的想法。我意识到,在我对anubhava的回答的评论中,我还有一些要求。你的正则表达式不是由“1)某些文本”触发的@UnoMeinAme:你可以轻松添加它。如果我知道正则表达式,我可以,但我不知道:)这里有一些很棒的想法。我意识到,在我对anubhava的回答的评论中,我还有一些要求。你的正则表达式不是由“1)某些文本”触发的@UnoMeinAme:你可以轻松添加它。如果我知道正则表达式,我可以,但我不知道:)这里有一些很棒的想法。我意识到,在我对anubhava的回答的评论中,我还有一些要求。你的正则表达式不是由“1)某些文本”触发的@UnoMeinAme:你可以轻松添加它。如果我知道正则表达式,我可以,但我不知道:)这里有一些很棒的想法。我意识到,在我对anubhava回答的评论中,我还有一些要求。你的正则表达式不是由“1)某些文本”触发的@UnoMeinAme:你可以轻松添加它。如果我知道正则表达式,我可以,但我不:)