preg_match PHP 建议

发布于 2024-12-11 22:17:35 字数 197 浏览 0 评论 0原文

我还不太擅长 preg_match,我想知道是否有人可以帮助我。 我有一个值数组,例如 array("black*", "blue", "red", "grey*") 我需要使用 * 查找值最后然后返回它之前的单词。

我相信 preg_match() 是最好的方法,但我愿意接受建议。

提前致谢!

I'm not too great at preg_match yet and I was wondering if someone could give me a hand.
I have an array of values e.g. array("black*", "blue", "red", "grey*") I need to find the values with a * at the end then return the word before it.

I believe preg_match() is the best way of doing it but I'm open to suggestions.

Thanks in advanced!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

被你宠の有点坏 2024-12-18 22:17:35

如果您必须使用正则表达式...

$words = array_map(function($word) {
   return preg_replace('/\*\z/', '', $word);
}, $arr);

CodePad

...但是你最好不要使用正则表达式并使用类似...

$words = array_map(function($word) {
   return rtrim($word, '*');
}, $arr);

CodePad

如果您只想返回尾随有 * 的单词,请先尝试这样的操作...

$words = preg_grep('/\*\z/', $arr);

键盘

这样做的唯一缺点(如评论中提到的)是 PHP 将在数组上迭代两次。如果您愿意,您可以简单地使用 foreach 循环在一个循环中完成这两项操作。

另外,值得一提的是,匿名函数是 PHP 5.3 中的一个东西。您仍然可以使用大部分代码,只需将函数分成它们自己的命名函数并传递对它们的引用即可。

If you must use a regex...

$words = array_map(function($word) {
   return preg_replace('/\*\z/', '', $word);
}, $arr);

CodePad.

...but you're probably better off not using regex and using something like...

$words = array_map(function($word) {
   return rtrim($word, '*');
}, $arr);

CodePad.

If you want to return only the words which have a trailing *, try something like this first...

$words = preg_grep('/\*\z/', $arr);

CodePad.

The only disadvantage with this (as mentioned in the comments) is PHP will iterate twice over the array. You can simply use a foreach loop to do both of these in one loop if you wish.

Also, it is worth mentioning anonymous functions are a PHP 5.3 thing. You can still most of this code, just separate the functions into their own named functions and pass a reference to them.

小矜持 2024-12-18 22:17:35

如果你总是有一个这样的数组(即没有复杂的字符串,只有单词*),你真的不应该使用正则表达式,这是一种矫枉过正。
使用字符串函数,例如用于搜索的 strpos 和用于删除 * 的 str_replace 或 rtrim。

如果您不需要花哨的替换规则(如正则表达式),则应始终使用此函数而不是 preg_replace()。

— 来自 str_replace 手册

If you always have an array like that (i.e. no complex strings, just word*), you really shouldn't use regular expressions, it's an overkill.
Use string functions, like strpos for searching and str_replace or rtrim for removing *.

If you don't need fancy replacing rules (like regular expressions), you should always use this function instead of preg_replace().

— from str_replace manual

最近可好 2024-12-18 22:17:35

不需要为此使用 preg_match - 对字符串进行简单的字符查找即可:

$words = array('red*', 'grey', 'white', 'green*');
$return = array();

foreach ($words as $word) {
    if ($word[strlen($word) - 1] === '*') {
        $return[] = substr($word, 0, -1);
    }
}
var_dump($return);

Don't need to use preg_match for this - simple char lookup on the string will work:

$words = array('red*', 'grey', 'white', 'green*');
$return = array();

foreach ($words as $word) {
    if ($word[strlen($word) - 1] === '*') {
        $return[] = substr($word, 0, -1);
    }
}
var_dump($return);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文