Php 选择两个字符之间的所有内容,但不包括它们

Php 选择两个字符之间的所有内容,但不包括它们,php,regex,Php,Regex,我一直在寻找如何选择字符串中两个字符之间的所有内容 示例字符串: @ Some text here @ 要选择此选项,我执行了以下操作: /@(.*)@/ 但它包括@符号 我尝试使用我在网上找到的不同方法,但没有成功。听起来你不熟悉捕捉群体的概念。从这里的一些文本中,您可以使用类似/t+t/的东西在Word文本中间提取EX。虽然整个比赛将是文本,但第1组仅为ex 通过将空变量/空数组作为第三个参数传递给,可以在PHP中使用捕获组 如果提供了$matches,那么它将填充搜索结果。 $matc

我一直在寻找如何选择字符串中两个字符之间的所有内容

示例字符串:

@ Some text here @
要选择此选项,我执行了以下操作:

/@(.*)@/
但它包括@符号


我尝试使用我在网上找到的不同方法,但没有成功。

听起来你不熟悉捕捉群体的概念。从这里的一些文本中,您可以使用类似/t+t/的东西在Word文本中间提取EX。虽然整个比赛将是文本,但第1组仅为ex

通过将空变量/空数组作为第三个参数传递给,可以在PHP中使用捕获组

如果提供了$matches,那么它将填充搜索结果。 $matches[0]将包含与完整模式匹配的文本, $matches[1]将包含与第一次捕获的文本匹配的文本 括号中的子模式,依此类推


听起来你似乎不熟悉捕捉群体的概念。从这里的一些文本中,您可以使用类似/t+t/的东西在Word文本中间提取EX。虽然整个比赛将是文本,但第1组仅为ex

通过将空变量/空数组作为第三个参数传递给,可以在PHP中使用捕获组

如果提供了$matches,那么它将填充搜索结果。 $matches[0]将包含与完整模式匹配的文本, $matches[1]将包含与第一次捕获的文本匹配的文本 括号中的子模式,依此类推


你用什么方法工作?我将使用preg_match_all来解释两个可能的正则表达式

$text = "hello @this is what i want@notthis!";

if (preg_match_all("/@([^@]*)@/", $text, $results))
    var_dump($results);
    // [0][0] "@this is what i want@"
    // [1][0] "this is what i want"

if (preg_match_all("/(?<=@)([^@]*)(?=@)/", $text, $results))
    var_dump($results);
    // [0][0] "this is what i want"
    // [1][0] "this is what i want"
如果有多个引用,可以循环第一个深度。因此,循环遍历$results[1]将始终为您提供正确的字符串,因为该字符串所在的括号是可搜索区域中的第一个括号

至于表达方式:

第一个是常规版本。您可以在指定的字符内查找指定的文本,但@除外。但是由于preg_match_all会给出它找到的整个字符串加上结果,所以也会得到@

第二个表达式使用所谓的lookaround。这意味着第一个和最后一个括号中的字符不是搜索区域的一部分,而是在前/后


你用什么方法工作?我将使用preg_match_all来解释两个可能的正则表达式

$text = "hello @this is what i want@notthis!";

if (preg_match_all("/@([^@]*)@/", $text, $results))
    var_dump($results);
    // [0][0] "@this is what i want@"
    // [1][0] "this is what i want"

if (preg_match_all("/(?<=@)([^@]*)(?=@)/", $text, $results))
    var_dump($results);
    // [0][0] "this is what i want"
    // [1][0] "this is what i want"
如果有多个引用,可以循环第一个深度。因此,循环遍历$results[1]将始终为您提供正确的字符串,因为该字符串所在的括号是可搜索区域中的第一个括号

至于表达方式:

第一个是常规版本。您可以在指定的字符内查找指定的文本,但@除外。但是由于preg_match_all会给出它找到的整个字符串加上结果,所以也会得到@

第二个表达式使用所谓的lookaround。这意味着第一个和最后一个括号中的字符不是搜索区域的一部分,而是在前/后


您想得到什么结果?请提供一些示例数据和所需的输出,否则都是猜测。@Lix是的,我使用了不可见的HTML标记,将它们更改为@signs。我想删除@signsdid之间文本周围的所有内容。您可以尝试以下操作:/@[\@]+@/您想要得到什么结果?请提供一些示例数据和所需的输出,否则这都是猜测。@Lix是的,我使用了不可见的HTML标记,将它们更改为@signs。我想删除@signsdid之间文本周围的所有内容。请尝试以下操作:/@[\@]+@/