簡體   English   中英

正則表達式模式以匹配相鄰字符

[英]Regular expression pattern to match adjacent characters

我正在尋找一個正則表達式模式,該模式可以匹配php中字符串中的相鄰字符。

例如,如果我有字符串“ 1234”,我希望它匹配並返回

1
12
123
1234

PHP中的正則表達式可能嗎?

我試過了

$testString = '1234';
preg_match_all('/.+/', $testString, $matches);

但這只是返回整個字符串。

使用strrev技巧可以>>

碼:

$s = '1234';
preg_match_all('/(?=(.+$)).?/', strrev($s), $m);
foreach(range(sizeof($m[1]), 0) as $i) print strrev($m[1][$i]) . "\n"; 

輸出:

1
12
123
1234

看到這個演示。


但是,您也應該使用不帶正則表達式的簡單解決方案>>

碼:

$s = '1234';
foreach(range(1, strlen($s)) as $i) print substr($s, 0, $i) . "\n";

輸出:

1
12
123
1234

在此處檢查此代碼。

可能嗎? 是。 合理嗎? 可能不是。

這是Perl中的一個演示,只是為了演示可以通過您的特定示例完成:

#!/usr/bin/perl -l

my $string = "abcd";

my $pattern = qr{
    ^
    (?=  ( .{1} )  )
    (?=  ( .{2} )  )
    (?=  ( .{3} )  )
    (?=  ( .{4} )  )
}x;

my @captures = ($string =~ $pattern);

print for @captures;

運行時會產生以下輸出:

a
ab
abc
abcd

PHP使用的PCRE庫完全可以做到這一點。 但是我什至不會那樣做。

至於任意分組,這甚至變得更加棘手,需要遞歸模式和更嚴格的魔術。 除了某種形式的防擴展性編程競賽之外,我不會這樣做,而不是希望保留但不會被槍殺的真實代碼。

不,不能(合理地)使用正則表達式。

這就是為什么發明了循環的原因。 我敢肯定,用一個簡單的for循環來煮些東西是很容易的。

例:

$str = "1234";
for ($i = 0; $i < strlen($str); $i++) {
    echo substr($str, 0, $i+1) . "\n";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM