使用正则表达式匹配整个字符串

4
我在一个需要用正则表达式匹配整个字符串而不是查找模式是否存在于字符串中的情况中有些困惑。
假设我有一个正则表达式。
/\\^^\\w+\\$^/

我想要的是代码会遍历各种字符串,将字符串与正则表达式进行比较,并在字符串以 ^ 开头和结尾时执行某些任务。
例子:
^hello world^ 是匹配的
my ^hello world^ 不应该匹配
PHP 函数 preg_match 可以匹配这两个结果。
有什么线索吗?

1
只是想澄清一下,即使已经有了许多答案,但是在“^”之间的文本是否只需要一个单词?它可以包含空格或其他标点符号吗?它可以包含“^”吗?更多细节将允许更具体的正则表达式。 - Will
我已经编辑了我的回答,请尝试。 - Andreas Wong
6个回答

6
锚定端点。
/^...$/

5

以下是一种完成该工作的方法:

$strs = array('^hello world^', 'my ^hello world^');
foreach($strs as $str) {
    echo $str, preg_match('/^\^.*\^$/', $str) ? "\tmatch\n" : "\tdoesn't match\n";
}

输出:

^hello world^   match
my ^hello world^        doesn't match

此外,尽可能像M42一样使用单引号字符串来表示正则表达式,以避免“斜杠门齿症候群”(即过多的反斜杠)和双引号字符串所受到的额外处理。 - Alan Moore

2

实际上,^\^\w+\^$不会匹配"^hello world^",因为你有两个单词;正则表达式只寻找被"^"包围的单个单词。

你要寻找的是:^\^.*\^$ 这将匹配 "^^","^hello world^","^一个非常长的字符字符串^",等等,但不匹配 "hello ^world^"。


2
您可以使用正则表达式:
^\^[\w\s]+\^$

^是正则表达式元字符,用作起始锚点。要匹配一个字面上的^,需要将其转义为\^

因此我们有:

  • ^:起始锚点
  • \^:一个字面上的^
  • [\w\s]+:空格分隔的单词。
  • \^:一个字面上的^
  • $:结束锚点。

Ideone链接


很好的解释,但正如我所提到的,\w+只匹配单个单词。如果有多个单词(即,每个单词之间用空格分隔),则该模式将无法匹配。有各种方法可以做到这一点,但最简单和最完整的匹配方式是使用.*,它将匹配0个或多个字符,而不管它们是什么。 - Will
不是要挑剔,但 [\w\s]+ 要求在 "^" 之间至少有一个单词字符或空格字符。因此它将不匹配 "^^" 或 "^123^"(或者 \w 是否也匹配数字?我得检查一下)。我已经向 OP 发表了评论以获得更多澄清;我认为我们都对匹配模式的具体细节做出了一些假设。 - Will
@Will:是的,\w 匹配数字和字母。这个正则表达式漏掉了标点符号字符。 - Alan Moore

0

尝试

/^\^\s*(\w+\s*)+\^$/

0
另一种模式是:^\^[^\^]*\^$,如果你想匹配 "^hello world^" 而不是 "hello ^world^",或者使用 \^[^\^]*\^ 如果你想在 "hello ^world^" 字符串中匹配 "^hello world^" 和 world。
对于威尔:^\^.*\^$ 这也会匹配 "^hello^wo^rld^",我认为这是不正确的。

1
如果我正确理解了 OP,我相信唯一的要求是字符串开头和结尾有 "^";至于字符串中间是否有 "^" 没有提到。 "my ^hello world^" 不应该匹配,因为它没有以 "^" 开头,而不是因为它在字符串中间有 "^"。 - Will

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接