在 PHP 中获取与通配符匹配的字符串

发布于 2024-08-10 18:43:12 字数 305 浏览 3 评论 0原文

我需要 PHP 中的一个非常具体的函数。基本上,我有两个字符串作为参数,其中一个是包含可变长度通配符 (*) 的模式,另一个是与该模式匹配的字符串。我需要从后一个字符串中获取一个字符串数组,用于填充模式中的通配符。

例如:

  • 参数 1:“这是我 * 的 * 字符串”
  • 参数 2:“这是我自己创建的很棒的字符串”
  • 返回: array("my Awesome","created myself")

最简洁的方法是什么?请记住,这些并不总是像示例中那样的英语单词字符串,它们可以是任何随机字符。

I need a very specific function in PHP. Basically, I have two strings as arguments, one of which is a pattern that contains wildcards of variable length (*), and one of which is a string that matches that pattern. I need to get an array of the strings from the latter string that fill in the wildcards in the pattern.

For example:

  • Argument 1: "This is * string that I *"
  • Argument 2: "This is my awesome string that I created myself"
  • Return: array("my awesome","created myself")

What's the cleanest way to do this? Bear in mind that these are not always strings of english words as in the example, they could be any random characters.

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

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

发布评论

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

评论(2

苏大泽ㄣ 2024-08-17 18:43:12

您可以将通配符替换为等效的正则表达式,然后通过 preg_match 运行它。

因为它听起来确实像家庭作业,所以我也不会给出任何具体代码,但我会充分利用 preg_replace (用正则表达式等效项替换通配符)和 preg_match (构建数组匹配子串)。

You could just replace the wildcards with a regex equivalent, and run it through preg_match.

Because it really does sound like homework, I won't give any specific code either, but I'd make good use of preg_replace (to replace the wildcards with regex equivalents) and preg_match (to build the array of matching substrings).

诺曦 2024-08-17 18:43:12

听起来像是家庭作业。这是一个没有任何实际代码的演练:

将模式标记为字符串和通配符。迭代令牌;每次目标字符串以常规(字符串、非通配符)标记开头时,修剪该字符串。每次遇到通配符标记时,查找字符串中下一个标记的索引并修剪到该索引。存储它。如果任何时候没有匹配,则返回 false。如果在模式完成之前遇到字符串结尾,则返回 false。如果最终标记是通配符,则保存字符串的其余部分。

Sounds like homework. Here is a walk-through without any actual code:

Tokenize the pattern into strings and wildcards. Iterate over the tokens; each time the target string starts with a regular (string, non-wildcard) token, trim that string off. Each time you encounter a wild card token, find the index of the next token in the string and trim off up to that index. Store that. If at any time there is no match, return false. If you encounter the end of the string before the pattern is complete, return false. If the final token is a wildcard, save the remainder of the string.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文