-3

我有以下字符串:

abc:def    abc:ghi    abc:jkl

如何检查我的第一次出现是否以“abc:”开头?该字符串除了制表符 (\t) 外没有空格。这是我需要的结果:

abc:def    abc:ghi    abc:jkl    // true
foo:def    abc:ghi    abc:jkl    // false
def        abc:ghi    abc:jkl    // false
abc:def    foo:ghi    jkl        // true

另外,如果需要,我需要检查其他部分。例如,如果我需要检查第二部分:

abc:def    abc:ghi    abc:jkl    // true
foo:def    bar:ghi    abc:jkl    // false
def        ghi        abc:jkl    // false
foo:def    abc:ghi    jkl        // true

我试过preg_match("/abc\:([^\t]+)/",$data,$match);了,但true如果其他出现包含“abc:”,此代码也会返回。谢谢!

编辑:对不起,但这不是一个重复的问题。请参阅我的问题的第二部分。在这第二部分中,我不要求如何在第一次出现时获取元素。PHP startsWith() 和 endsWith() 函数无法解决我的问题的第二部分。谢谢你。

4

3 回答 3

2

您不需要使用正则表达式。PHP 有很多可以搜索你的内置函数。

对于第一次出现:

http://php.net/manual/en/function.strpos.php

strpos($data, 'abc') === 0

您可以通过“\t”分解每一行,然后使用上述strpos函数检查您想要的任何一行。

于 2013-07-30T18:24:02.200 回答
1

不需要正则表达式,您可以使用:

   (strpos($string, 'abc') === 0)

它将检查 abc 是否位于字符串的 0 索引处。(如果 abc 不存在,则返回 -1)

于 2013-07-30T18:23:36.390 回答
1

首先,获取行并分解字符串,以便将每一列都放在自己的存储桶中。

$line_data = preg_split("/\t/",$line);

然后,选择您想要的列,看看它是否符合您的需要。

if (preg_match("/^abc\b/",$line_data[1])){  #This matches the beginning of column 2 only if the string is on a boundary.
    #Do stuff
}
于 2013-07-30T18:24:18.300 回答