嗯伙计们,我真的希望我的英语能很好地解释我的需要.
让我们举个例子(这只是一个例子!)代码:
class Something(){
public function Lower($string){
return strtolower($string);
}
}
class Foo{
public $something;
public $reg;
public $string;
public function __construct($reg, $string, $something){
$this->something = $something;
$this->reg = $reg;
$this->string = $string;
}
public function Replace(){
return preg_replace_callback($this->reg, 'Foo::Bar', $this->string);
}
public static function Bar($matches){
/*
* [...]
* do something with $matches and create the $output variable
* [...]
*/
/*
* I know is really useless in this example, but i need to have an …Run Code Online (Sandbox Code Playgroud) php preg-replace preg-replace-callback preg-match-all preg-match
我将如何使用PHP之间提取的一切[startstring],并[endstring]从该字符串:
[startstring]hello = guys[endstring] hello guys [startstring]jerk = you[endstring] welcome to the universe
Run Code Online (Sandbox Code Playgroud)
我想找到的所有比赛[startstring],并[endstring]和echo中的文本.有点像分界符.而且我希望所有的比赛都被空间分开.
我将如何实现这一目标?这需要regex吗?你能提供样品吗?
非常感谢!:)
我正试图从字符串中获取电子邮件.
$string = "bla bla pickachu@domain.com MIME-Version: balbasur@domain.com bla bla bla";
$matches = array();
$pattern = '\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b';
preg_match_all($pattern,$string,$matches);
print_r($matches);
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:分隔符不能是字母数字或反斜杠
从http://www.regular-expressions.info/email.html获取正则表达式语法
我该怎么办?提前致谢!
我有这个字符串
@ [123:peterwateber]你好095032sdfsdf!@ [589:ZZZZ]
我想得到123和589你是如何使用正则表达式或PHP中的东西?
注意:peterwateber和zzzz就是例子.应该考虑任何随机字符串
这是一个非常简单的问题,但我无法在任何地方找到解决方案.
我尝试使用preg_match或preg_match_all从括号内获取字符串,但没有括号.
到目前为止,我的表达式如下:
\([A-Za-z0-9 ]+\)
Run Code Online (Sandbox Code Playgroud)
并返回以下结果:
3(空心高亮)928-129(< - 原始字符串)
(空心高亮)(< - 结果)
我想要的是括号内的字符串,但没有括号.它看起来像这样:
镂空亮点
我之后可能用str_replace或其他东西替换括号,但这对我来说似乎不是一个非常优雅的解决方案.
我需要添加什么,所以括号不包含在结果中?
谢谢你的帮助,你们真棒!:)
我有preg_match_all函数:
preg_match_all('#<h2>(.*?)</h2>#is', $source, $output, PREG_SET_ORDER);
Run Code Online (Sandbox Code Playgroud)
它按预期工作,但问题是,它preg_matches所有项目两次,并进入一个巨大的多维数组,例如,如预期的那样,preg_matched所有11项所需,但两次,并进入一个多维数组:
Array
(
[0] => Array
(
[0] => <h2>10. <em>Cruel</em> by St. Vincent</h2>
[1] => 10. <em>Cruel</em> by St. Vincent
)
[1] => Array
(
[0] => <h2>9. <em>Robot Rock</em> by Daft Punk</h2>
[1] => 9. <em>Robot Rock</em> by Daft Punk
)
[2] => Array
(
[0] => <h2>8. <em>Seven Nation Army</em> by the White Stripes</h2>
[1] => 8. <em>Seven Nation Army</em> by the White Stripes
)
[3] => Array
(
[0] => <h2>7. …Run Code Online (Sandbox Code Playgroud) 在PHP中,我有以下字符串:
$str = "AAA, BBB, (CCC,DDD), 'EEE', 'FFF,GGG', ('HHH','III'), (('JJJ','KKK'), LLL, (MMM,NNN)) , OOO";
Run Code Online (Sandbox Code Playgroud)
我需要将此字符串拆分为以下部分:
AAA
BBB
(CCC,DDD)
'EEE'
'FFF,GGG'
('HHH','III')
(('JJJ','KKK'),LLL, (MMM,NNN))
OOO
Run Code Online (Sandbox Code Playgroud)
我尝试了几个正则表达式,但找不到解决方案.有任何想法吗?
UPDATE
我决定使用正则表达式并不是最好的解决方案,在处理格式错误的数据,转义报价等时.
感谢在这里提出的建议,我找到了一个使用解析的函数,我根据自己的需要重写了这个函数.它可以处理不同类型的支架,分隔符和报价也是参数.
function explode_brackets($str, $separator=",", $leftbracket="(", $rightbracket=")", $quote="'", $ignore_escaped_quotes=true ) {
$buffer = '';
$stack = array();
$depth = 0;
$betweenquotes = false;
$len = strlen($str);
for ($i=0; $i<$len; $i++) {
$previouschar = $char;
$char = $str[$i];
switch ($char) {
case $separator:
if (!$betweenquotes) {
if (!$depth) {
if ($buffer !== '') {
$stack[] …Run Code Online (Sandbox Code Playgroud) 我试图在字符串中获取图像的长度.
我的字符串
$page="<img><img><img><img>";
Run Code Online (Sandbox Code Playgroud)
从上面的字符串,我想得到输出"4图像".
我试过preg_match_all()并count()运行,但它总是返回"1张图片".
$page="<img><img><img><img>";
preg_match_all("/<img>/",$page,$m);
echo count($m);
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以知道字符串中有多少图像?
我正在设计一个脚本并试图在php中没有eval的if构造.
仍然不完整但爆破,它是做一个模板引擎,引擎的"if"部分.不允许赋值运算符,但我需要测试值而不允许PHP代码注入,正好不使用eval它需要在变量之间进行单独操作以防止注入攻击.
正则表达式必须捕获
[if:(a+b-c/d*e)|(x-y)&!(z%3=0)]
output
[elseif:('b'+'atman'='batman')]
output2
[elseif:('b'+'atman'='batman')]
output3
[elseif:('b'+'atman'='batman')]
output4
[else]
output5
[endif]
[if:(a+b-c/d*e)|(x-y)&!(z%3=0)]
output6
[else]
output7
[endif]
Run Code Online (Sandbox Code Playgroud)
以下工作来获取if,elseif,else和endif块以及条件语句:
$regex = '^\h*\[if:(.*)\]\R(?<if>(?:(?!\[elseif)[\s\S])+)\R^\h*\[elseif:(.*)\]\R(?<elseif>(?:(?!\[else)[\s\S])+)\R^\h*\[else.*\]\R(?<else>(?:(?!\[endif)[\s\S])+)\R^\[endif\]~xm';
Run Code Online (Sandbox Code Playgroud)
请帮助选择elseif和其他.
然后使用条件语句,我可以得到以下操作:
$regex = '~([^\^=<>+\-%/!&|()*]+)([\^+\-%/!|&*])([^\^=<>+\-%/!&|()*]*)~';
Run Code Online (Sandbox Code Playgroud)
然而,它只会配对它们,错过每个第三个操作员......
谢谢你的帮助.
我有兴趣实时替换数字匹配并将它们操作为十六进制.
我很想知道是否可以不使用foreach循环.
所以...
两者之间的一切 :
= {数值} ;
将被归为:
= {十六进制数值} ;
preg_match_all('/\=[0-9]\;/',$src,$matches);
Run Code Online (Sandbox Code Playgroud)
是否有任何回调preg_match_all所以不是预先形成一个循环,我可以在preg_match_all捕获每个匹配(实时)时立即操作它们.
这不是正确的语法,但你可以得到这个想法:
preg_match_all_callback('/\=[0-9]\;/',$src,$matches,{convertAll[0-9]ToHexadecimal});
Run Code Online (Sandbox Code Playgroud) php ×10
preg-match-all ×10
regex ×6
preg-match ×5
arrays ×1
callback ×1
numeric ×1
pcre ×1
preg-replace ×1
split ×1
string ×1