标签: preg-match

PHP字符串控制台参数到数组

我想知道如何将给定的字符串转换为指定的数组:

all ("hi there \(option\)", (this, that), other) another
Run Code Online (Sandbox Code Playgroud)

想要的结果(数组)

[0] => all,
[1] => Array(
    [0] => "hi there \(option\)",
    [1] => Array(
        [0] => this,
        [1] => that
    ),
    [2] => other
),
[2] => another
Run Code Online (Sandbox Code Playgroud)

这用于我在PHP上制作的一种控制台.我尝试使用preg_match_all但是,我不知道如何在括号内找到括号以"在数组中创建数组".

编辑

应将示例中未指定的所有其他字符视为String.

编辑2

我忘了提到括号外的所有参数都应该被space字符检测到.

php regex arrays explode preg-match

17
推荐指数
2
解决办法
478
查看次数

使用用户的RegEx是否安全?

我想在我的网站上添加一项功能,让用户搜索文本RegEx.但是,让用户做这样的事情是否安全?

preg_match('/' . $user_input_regex . '/', $subject);
Run Code Online (Sandbox Code Playgroud)

php regex user-input code-injection preg-match

16
推荐指数
1
解决办法
1351
查看次数

正则表达式可选组?

我似乎把自己与preg_match正则表达式混淆了,我正在做,所以新鲜的眼睛和帮助将不胜感激.

我目前的正则表达式如下:

/<!--menu:start:\(([0-9])\,([0-9])\)-->(.*?)<!--menu:end-->/se
Run Code Online (Sandbox Code Playgroud)

我想要输入数字和冒号,例如:(1,4)可选,所以它匹配:

<!--menu:start--><!--menu:end-->
Run Code Online (Sandbox Code Playgroud)

要么

<!--menu:start:(0,3)--><!--menu:end-->
Run Code Online (Sandbox Code Playgroud)

php regex preg-replace preg-match

15
推荐指数
3
解决办法
2万
查看次数

用于查找有效文件名的正则表达式

我想检查字符串是否是文件名(名称为DOT ext).

文件名不能包含 / ? * : ; { } \

你能建议我在preg_match()中使用正则表达式吗?

php regex validation preg-match

15
推荐指数
2
解决办法
2万
查看次数

如何只返回带有preg_match或preg_match_all的命名组?

例:

$string = "This is some text written on 2010-07-18.";
preg_match('|(?<date>\d\d\d\d-\d\d-\d\d)|i', $string, $arr_result);
print_r($arr_result);
Run Code Online (Sandbox Code Playgroud)

返回:

Array
(
    [0] => 2010-07-18
    [date] => 2010-07-18
    [1] => 2010-07-18
)
Run Code Online (Sandbox Code Playgroud)

但我希望它是:

Array
(
    [date] => 2010-07-18
)
Run Code Online (Sandbox Code Playgroud)

在PHP的PDO对象中,有一个选项可以通过删除这些重复的编号值来过滤数据库中的结果:PDO::FETCH_ASSOC.但我还没有看到PHP中PCRE函数的类似修饰符.

php regex preg-match

15
推荐指数
3
解决办法
1万
查看次数

PHP正则表达式非捕获非匹配组

我正在制作一个匹配正则表达式的日期,而且一切都很顺利,到目前为止我已经得到了这个:

"/(?:[0-3])?[0-9]-(?:[0-1])?[0-9]-(?:20)[0-1][0-9]/"
Run Code Online (Sandbox Code Playgroud)

它(希望)将匹配单个或两位数的日期和月份,以及21世纪的两倍或四倍数字年份.到目前为止,一些试验和错误让我受益匪浅.

但是,关于这些结果,我有两个简单的问题:

  1. (?: )对此有什么简单的解释?显然,这是一个不匹配的群体.但是之后...

  2. 结尾?是什么?例如(? )?

php regex date match preg-match

15
推荐指数
2
解决办法
2万
查看次数

preg_match php街道地址

我需要在php地址中使用正则表达式进行匹配,例如:

  • 144街道,城市,州邮政编码
  • 144街,apt#1,城市,州邮政编码
  • 144 street apt#1,城市州邮政编码

邮政编码可包括字母和/或数字.

这是我试过的:

print_r(preg_match('/^([0-9]+)\s([a-z]+)\s([a-z]+)\s([a-z]+)\s([a-z0-9]+)$/i', $t, $m));
print_r($m);
Run Code Online (Sandbox Code Playgroud)

它输出:

Array
(
    [0] => 123 asd asd asd 123
    [1] => 123
    [2] => street
    [3] => city
    [4] => state 
    [5] => zip
)
Run Code Online (Sandbox Code Playgroud)

这只能使用空格.当我有一个逗号它不起作用,它会导致一个空数组.

我该怎么办还包括逗号?

php preg-match

15
推荐指数
1
解决办法
3946
查看次数

检测文本中的电子邮件

我正在尝试创建一个函数,将给定字符串中每个出现的纯文本电子邮件地址转换为它的html化版本.

假设我有以下代码,htmlizeEmails我正在寻找的功能在哪里:

$str = "Send me an email to bob@example.com.";
echo htmlizeEmails($str); // Echoes "Send me an email to <a href="mailto:bob@example.com">bob@example.com</a>."
Run Code Online (Sandbox Code Playgroud)

如果可能,我希望此功能使用该filter_var功能来检查电子邮件是否有效.

有谁知道如何做到这一点?谢谢!

编辑:

感谢您的答案,我用令人震惊的正则表达式匹配潜在的电子邮件地址,然后,只有filter_var验证它,它就会被取代.

function htmlizeEmails($text)
    preg_match_all('/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6})/', $text, $potentialEmails, PREG_SET_ORDER);

    $potentialEmailsCount = count($potentialEmails);
    for ($i = 0; $i < $potentialEmailsCount; $i++) {
        if (filter_var($potentialEmails[$i][0], FILTER_VALIDATE_EMAIL)) {
            $text = str_replace($potentialEmails[$i][0], '<a href="mailto:' . $potentialEmails[$i][0] .'">' . $potentialEmails[$i][0] .'</a>', $text);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

php regex email preg-replace preg-match

15
推荐指数
2
解决办法
7945
查看次数

PHP preg_match介于字符串之间

我正在尝试获取字符串hello world.

这是我到目前为止所得到的:

$file = "1232#hello world#";

preg_match("#1232\#(.*)\##", $file, $match)
Run Code Online (Sandbox Code Playgroud)

php regex preg-match

15
推荐指数
2
解决办法
4万
查看次数

提取花括号正则表达式php之间的所有值

我有这种形式的内容

$content ="<p>This is a sample text where {123456} and {7894560} ['These are samples']{145789}</p>";
Run Code Online (Sandbox Code Playgroud)

我需要数组中花括号之间的所有值,如下所示:

array("0"=>"123456","1"=>"7894560","2"=>"145789")
Run Code Online (Sandbox Code Playgroud)

我试过这段代码:

<?php
preg_match_all("/\{.*}\/s", $content, $matches);
?>
Run Code Online (Sandbox Code Playgroud)

但我在这里得到的值从第一个大括号到内容中找到的最后一个.如何以上述格式获取数组?我知道我使用的模式是错误的.如何获得上面显示的所需输出?

php regex preg-match

15
推荐指数
2
解决办法
2万
查看次数